Показать визуализированное изображение UIelement (Visual) в WPF элемента управления изображением - PullRequest
0 голосов
/ 02 мая 2018

Я занимаюсь разработкой приложения и хотел бы реализовать функцию, аналогичную пейджинговой системе 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 Ответ

0 голосов
/ 02 мая 2018

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

Предполагая, что существует элемент 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...