在项目中需要将datagrid这个控件转化成图像输出,思考了几种办法:
1.可以对屏幕截取,然后再根据控件相对于屏幕的坐标再次截取,即可取得控件截图。这种方法限制性很大,如图像的分辨率被限死,同时,如果控件不在屏幕中显示的话那么就无法进行截图。
2.查看datagrid源码,重新绘制图形。这个办法只要掌握,其实一劳永逸。只不过需要时间过长,略显复杂,项目中需要一种简洁的方法来操作。
3.有自带方法绘制控件。经过查阅资料,整理代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
private void SaveToImage(FrameworkElement p_FrameworkElement, string p_FileName) { System.IO.FileStream fs = new System.IO.FileStream(p_FileName, System.IO.FileMode.Create); RenderTargetBitmap bmp = new RenderTargetBitmap((int)p_FrameworkElement.ActualWidth, (int)p_FrameworkElement.ActualHeight, 96.0, 96.0, PixelFormats.Pbgra32); bmp.Render(p_FrameworkElement); BitmapEncoder encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bmp)); encoder.Save(fs); fs.Close(); fs.Dispose(); }
|
使用这样的方法不仅大大缩短了开发时间,还可以根据要求,隐藏控件或者自定义控件转化为图像的属性。