Показать визуализированное изображение 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();