在WPF程序中将控件所呈现的内容保存成图像(转载)
2015-04-16 08:29
806 查看
在WPF程序中将控件所呈现的内容保存成图像
转自:/article/4659035.html有的时候,我们需要将控件所呈现的内容保存成图像保存下来,例如: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);
}
相关文章推荐
- 在WPF程序中将控件所呈现的内容保存成图像
- Android中将View的内容保存为图像的方法
- Android中将View的内容保存为图像的方法
- 在窗体上放置saveFileDialog、openFileDialog两个控件。实现功能:1)程序运行时,在文本框(注意文本框多行、带垂直滚动条)中输入汉字、字符等,单击保存按钮,即可将文本框中内容保
- wpf 保存控件中的内容为图片格式
- Android中将View的内容保存为图像的简单实例
- Winform中的DataGridView控件内容自动保存《转载》
- 如何在后台线程中将View内容保存成图像
- WPF中控件绑定XML文件,实现修改XML文件即可以改变程序控件内容
- MFC中将控件保存成图片 && MFC中利用GDI+在控件上绘图,把图像保存成图片
- [转载]iPhone程序中将内容分享到新浪微博
- Android中将View的内容保存为图像的方法
- 安卓开发一些界面控件的小例子(部分内容转载,持续更新ING)
- (转载)几个基于内容图像检索系统
- matlab 实践程序7——将以文本文件的内容分批保存到多个txt文本中
- 用javascript拷贝保存页面控件内容
- xp 虚拟机运行WPF程序的时候,有部分控件透明
- 使用RenderTargetBitmap获取WPF控件图像
- PictureBox图像控件保存透明色BMP、JPG图片
- [转载]利用MFC的Picture控件显示图像