WPF程序将控件所呈现的内容保存成图像
有的时候,我们需要将控件所呈现的内容保存成图像保存下来,例如:InkCanvas的手写墨迹,WebBrowser中的网页等。可能有人会说,这个不就是截图嘛,找到控件的坐标和大小,调用截图API不就可以了嘛。的确,对于规则的控件来说,通过截图的却可以实现,可是,如果控件不规则或不透明度不是100%,则会把其背景控件的视觉效果也给截取下来。
要实现只对控件进行截图,可以利用RenderTargetBitmap类获取Visual对象的视觉效果,从而实现对控件截图效果。
RenderTargetBitmap RenderVisaulToBitmap(Visual vsual, int width, int height)
{
var rtb = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Default);
rtb.Render(vsual);
return rtb;
}
这里需要说明一下,Visual对象的Alignment、Margin等影响布局的属性也会获取下来,例如,对如下按钮截图时,
<Button Content="Button" Margin="10,10,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="75" Height="22" />
按钮的起点坐标就不是(0,0),而是(10,10)。如果我们要把按钮的起点起点坐标设置为(0,0),则需要在Button属性把Alignment、Margin等属性去掉。既要去掉Alignment、Margin等属性,又要保持按钮的位置和大小不变,一个简单的做法是在按钮外面添加一个Border,在Broder中设置这些属性(在VisualStudio和Blend中设置一下分组即可,一步即可完成)。
<Border Margin="10,10,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="75" Height="22">
<Button Content="Button"/>
</Border>
通过RenderVisaulToBitmap函数,就可以把控件的视觉效果转换为RenderTargetBitmap对象了,RenderTargetBitmap对象继承自BitmapSource,是可以直接在Image控件中显示的。如果要更进一步把它转换为图像,则可以按照我以前的文章给图片加上阴影效果文章所示通过一个PngBitmapEncoder把BitmapSource对象保存为图片。
public enum ImageFormat { JPG, BMP, PNG, GIF, TIF }
void GenerateImage(BitmapSource bitmap, ImageFormat format, Stream destStream)
{
BitmapEncoder encoder = null;
switch (format)
{
case ImageFormat.JPG:
encoder = new JpegBitmapEncoder();
break;
case ImageFormat.PNG:
encoder = new PngBitmapEncoder();
break;
case ImageFormat.BMP:
encoder = new BmpBitmapEncoder();
break;
case ImageFormat.GIF:
encoder = new GifBitmapEncoder();
break;
case ImageFormat.TIF:
encoder = new TiffBitmapEncoder();
break;
default:
throw new InvalidOperationException();
}
encoder.Frames.Add(BitmapFrame.Create(bitmap));
encoder.Save(destStream);
}
相关内容
-
如何在安装过程中部署DevExpress控件
如何在安装过程中部署DevExpress控件,控件,文件,本文目录如何...
-
电脑网页打开页面不全怎么办|电脑网页打开后显
电脑网页打开页面不全怎么办|电脑网页打开后显示不全,,1. 电脑...
-
网页返回上一页快捷键|网页返回上一页的快捷键
网页返回上一页快捷键|网页返回上一页的快捷键,,网页返回上一...
-
计算机不能打开网页发送更多的数据包,但很少收到
计算机不能打开网页发送更多的数据包,但很少收到(解决方案)。,,问...
-
网页抓取电脑信息|电脑网页捕获
网页抓取电脑信息|电脑网页捕获,,1. 电脑网页捕获可以使用抓包...
-
电脑上不了qq和网页|电脑上qq有网,但是网页打不
电脑上不了qq和网页|电脑上qq有网,但是网页打不开,,电脑上qq有...
-
电脑网页内存高|电脑网页内存高怎么设置
电脑网页内存高|电脑网页内存高怎么设置,,1. 电脑网页内存高怎...
-
无法打开网络正常网页的解决方案
无法打开网络正常网页的解决方案,,昨天我在一家电脑公司做了一...
-
小米电脑flash怎么打开图片不显示|小米网页不显
小米电脑flash怎么打开图片不显示|小米网页不显示图片怎么办...
-
手机连接电脑调试网页|手机连接电脑调试网页怎
手机连接电脑调试网页|手机连接电脑调试网页怎么弄,,手机连接...
-
打开网页快捷键|复制打开网页快捷键
打开网页快捷键|复制打开网页快捷键,,复制打开网页快捷键其实,...
-
C# 控件BackColor = Color.Transparent没有透明
C# 控件BackColor = Color.Transparent没有透明的原因,窗体,...
-
1分钟学会在C++中将图像转换为Word文档,快速入手
1分钟学会在C++中将图像转换为Word文档,快速入手光学字符处理...
-
打开Web页面时,总是提示您是否可以运行诸如Activ
打开Web页面时,总是提示您是否可以运行诸如ActiveX控件和插件...
-
电脑配件怎么可能是真是假计算机辅助识别真假图
电脑配件怎么可能是真是假计算机辅助识别真假图像,,电脑配件怎...