在图像控件 WPF 中显示 UIelement(Visual) 的渲染图像
Show a rendered image of a UIelement(Visual) in an Image control 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\Debugfd77420-f62e-44e7-b206-b5ce19f01a9e.png",它说它无法在这个位置获取文件(现在我只是将输出复制进去,但它将被绑定,因为它应该是)。
如果我走的路不够优雅,有没有其他更好的方法,或者根本不将图像保存到磁盘?
谢谢!
您不需要进行任何图像编码。
假设有一个名为 image
的图像元素,您可以直接将 RenderTargetBitmap 分配给它的源 属性,如下所示:
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();
我正在开发一个应用程序,我想实现一个类似于 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\Debugfd77420-f62e-44e7-b206-b5ce19f01a9e.png",它说它无法在这个位置获取文件(现在我只是将输出复制进去,但它将被绑定,因为它应该是)。
如果我走的路不够优雅,有没有其他更好的方法,或者根本不将图像保存到磁盘?
谢谢!
您不需要进行任何图像编码。
假设有一个名为 image
的图像元素,您可以直接将 RenderTargetBitmap 分配给它的源 属性,如下所示:
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();