我已经搜索并了解如何使用BmpBitmapEncoder
在WPF中保存图像。我的程序有一个MVVM视图,我想保存为图像。是否可以将其设置为BitmapFrame
,以便进行编码?如果有,有在线教程吗?
下面列出的是我要保存的视图。
<Grid>
<view:OverallView Grid.Row="1"
Visibility="{Binding IsOverallVisible,Converter={StaticResource B2VConv}}" />
</Grid>
OverallView
是一个用户控件。
如果不能将视图设置为BitmapFrame
,那么哪些wpf元素可以设置为BitmapSource/Frame
?
2条答案
按热度按时间vddsk6oq1#
您可以将其返回为RenderTargetBitmap:
之后,您可以使用PngBitmapEncoder将其保存为PNG并将其保存到流中,例如:
FIX:bitmap => result
goqiplq22#
感谢上面的公认答案引导我找到了解决方案,但这实际上使需求过于复杂。具体来说,您不需要创建
DrawingVisual
来传递给Render
调用。您可以直接传递视图,因为它已经是Render
调用接受的Visual
。下面是一个简化的版本,我也将其更改为
FrameworkElement
上的扩展方法,因此您可以轻松地将其用于任何控件。注意:虽然
Render
接受Visual
,但是你不能扩展Visual
,因为你需要实际的宽度和高度来创建RenderTargetBitmap
,但是出于同样的原因,你可能已经在使用FrameworkElement
了。然后我有第二个扩展方法,它接受任何
BitmapSource
(RenderTargetBitmap
是它的子类),并根据提供的编码器返回字节。这就是你如何一起使用它。以下代码将任何
FrameworkElement
渲染为PNG:或者更流畅地说...
要将其渲染为JPG,只需更改编码器,就像这样...
此外,由于
RenderTargetBitmap
最终是ImageSource
(通过BitmapSource
),因此您也可以直接将其设置为Image
控件的Source
属性,如下所示。