在Image控件WPF中显示UIelement(Visual)的渲染图像

时间:2018-05-02 19:44:27

标签: c# wpf imagesource

我正在开发一个应用程序,我想实现一个类似于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 :(得分:0)

您无需进行任何图像编码。

假设有一个名为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();