Показать визуализированное изображение UIelement(Visual) в WPF элемента управления изображением

Я занимаюсь разработкой приложения и хотел бы реализовать функцию, аналогичную системе подкачки Microsoft Power Point, в которой есть уменьшенное изображение листов, над которыми вы работаете.

У меня есть следующая функция, которая отображает изображение сетки, в которой пользователь должен работать.

private void CreateImageOfPage()
    {
        int width = (int)this.WorkSheetViewModelList.Last().RootGrid.Width;
        int height = (int)this.WorkSheetViewModelList.Last().RootGrid.Height;
        RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
        renderTargetBitmap.Render(this.WorkSheetViewModelList.Last().RootGrid);
        PngBitmapEncoder pngImage = new PngBitmapEncoder();
        pngImage.Frames.Add(BitmapFrame.Create(renderTargetBitmap));

        JpegBitmapEncoder encoder = new JpegBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap));
        Guid photoID = System.Guid.NewGuid();

        String photolocation = "Temp/"+photoID.ToString() + ".png";
        using (var filestream = new FileStream(photolocation, FileMode.Create))
            encoder.Save(filestream);
        Console.WriteLine(Path.GetFullPath(photoID.ToString() + ".png"));
    }

Мой вопрос заключается в том, как получить, установить или отформатировать путь к сохраненному изображению, которое будет установлено в качестве источника изображения в XAML? В своем текущем виде путь выглядит так: "D:\Project\bin\Debug\7fd77420-f62e-44e7-b206-b5ce19f01a9e.png", и он говорит, что не может получить файл в этом месте (на данный момент я просто скопировал вывод в, но он будет связан, как и должно быть).

Если путь, который я выбрал, не изящен, есть ли другой способ сделать это лучше или вообще не сохранять образ на диск?

Спасибо!

1 ответ

Решение

Вам не нужно делать какие-либо кодировки изображений.

Предполагая, что есть элемент Image с именем imageВы можете напрямую назначить RenderTargetBitmap его свойству Source следующим образом:

image.Source = renderTargetBitmap;

Вы можете изменить свой метод на это:

private ImageSource CreateImageOfPage()
{
    var rootGrid = WorkSheetViewModelList.Last().RootGrid;
    var width = (int)rootGrid.ActualWidth;
    var height = (int)rootGrid.ActualHeight;
    var renderTargetBitmap = new RenderTargetBitmap(
        width, height, 96, 96, PixelFormats.Pbgra32);
    renderTargetBitmap.Render(rootGrid);
    return renderTargetBitmap;
}

и используйте это так:

image.Source = CreateImageOfPage();
Другие вопросы по тегам