首页 > wpf 对控件进行截图,获取快照

wpf 对控件进行截图,获取快照

有时候我们项目,在执行某个操作后,会生成一些数据结果,如报表一类的东西,我们需要对结果进行保存,甚至是生成word文档。

那么首先获取到控件快照就最基本的条件。

生成快照的静态方法类

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media.Imaging;namespace MvvmFuncationApp.Model
{public static class ToBitmapTool{/// /// 截图转换成bitmap/// /// /// 默认控件宽度/// 默认控件高度/// 默认0/// 默认0/// public static Bitmap ToBitmap(this FrameworkElement element, int width = 0, int height = 0, int x = 0, int y = 0){if (width == 0) width = (int)element.ActualWidth;if (height == 0) height = (int)element.ActualHeight;var rtb = new RenderTargetBitmap(width, height, x, y, System.Windows.Media.PixelFormats.Default);rtb.Render(element);var bit = BitmapSourceToBitmap(rtb);//测试代码DirectoryInfo d = new DirectoryInfo(System.IO.Path.Combine(Directory.GetCurrentDirectory(), "Cache"));if (!d.Exists) d.Create();bit.Save(System.IO.Path.Combine(d.FullName, "控件截图.png"));return bit;}/// /// BitmapSource转Bitmap/// /// /// public static Bitmap BitmapSourceToBitmap(this BitmapSource source){return BitmapSourceToBitmap(source, source.PixelWidth, source.PixelHeight);}/// /// Convert BitmapSource to Bitmap/// /// /// public static Bitmap BitmapSourceToBitmap(this BitmapSource source, int width, int height){Bitmap bmp = null;try{PixelFormat format = PixelFormat.Format24bppRgb;/*set the translate type according to the in param(source)*/switch (source.Format.ToString()){case "Rgb24":case "Bgr24": format = PixelFormat.Format24bppRgb; break;case "Bgra32": format = PixelFormat.Format32bppPArgb; break;case "Bgr32": format = PixelFormat.Format32bppRgb; break;case "Pbgra32": format = PixelFormat.Format32bppArgb; break;}bmp = new Bitmap(width, height, format);BitmapData data = bmp.LockBits(new System.Drawing.Rectangle(System.Drawing.Point.Empty, bmp.Size),ImageLockMode.WriteOnly,format);source.CopyPixels(Int32Rect.Empty, data.Scan0, data.Height * data.Stride, data.Stride);bmp.UnlockBits(data);}catch{if (bmp != null){bmp.Dispose();bmp = null;}}return bmp;}}
}

 

添加按钮事件:

        private void BitMapBtn_Click(object sender, RoutedEventArgs e){ 

       //
StudentInfoGrid =======>控件的名称
        ToBitmapTool.ToBitmap(StudentInfoGrid); }

     }

前台代码:

 "Gray" Name="StudentInfoGrid">

运行程序 ==》进入项目的debug目录下

 

 

 

转载于:https://www.cnblogs.com/likui-bookHouse/p/11114924.html

更多相关:

  • 作用批量执行sql语句 表达式.RunSQL(SQLStatement,UseTransaction) 表达式.一个代表DoCmd对象的变量。 注释:sqlstatement参数的最大长度为 32,768 个字符(而"宏"窗口中的 SQL 语句操作参数的最大长度为 256 个字符)。      官方说仅能用于Microsoft Acc...

  • 前戏:针对上一篇列出来的功能点,今天和大家分享下这个自定义的公式是怎么设计的,由于我的第一篇博客在首页被管理员移走了,大家可以点击这里来跳转,看下第一篇的目录结构。本人作为老菜鸟,和大家分享的也是一些老菜鸟的想法,大神千万别喷我.   设计背景:当初为什么要设计这个自定义的计算公式呢,原因就是,这个价格是不确定的,计算方式也是不确定的...

  • 背景 搭建一个适合公司erp业务的开发平台。 架构概要图:    流程引擎开发平台:  包含流程引擎设计器,流程管理平台,流程引擎服务。目前只使用单个数据库进行管理。  流程引擎设计器    采用silverlight进行开发,本质是对流程模型进行设计,并生成xml。包含:人工节点,自动节点,并行开始节点,并行结束节点,消息节点,文...

  • using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Xml;using System.Web; namespace BLL{    public  class XmlDoc    {       ...

  • 引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建(二)根据已知地图进行定位和导航(三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传我的Github。 这是第三部分,完成效果如下 图1 建图和导航 三、使用RTAB-Map进行建图和导航 1. rtab...

  • 引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建(二)根据已知地图进行定位和导航(三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传我的Github。 由于之前的虚拟机性能限制,我在这个项目中使用了新的ubantu 16.04环境,虚拟机配置 内存 8GCPU...

  • [{name:1},{name:2}].forEach((v,i,ar) => {console.log(v,i,ar)});//基础遍历[{name:1},{name:2}].map((v) => v.name);//[1,2]返回对象数组中指定字段值的一位数组(不改变原始数组)[{name:1},{name:2},{name:3}...

  • 体验内容 使用gmapping方法利用turtlebot底盘移动信息和激光雷达数据进行建图。 1. 安装一些依赖包 sudo apt-get install ros-melodic-move-base* sudo apt-get install ros-melodic-map-server* sudo apt-get insta...

  • 前言 我们知道Java/Python这种语言能够很好得 支持反射。反射机制 就是一种用户输入的字符串到对应实现方法的映射,比如http接口中 用户传入了url,我们需要调用该url对应的方法/函数对象 从而做出对应的操作。 而C++ 并没有友好得支持这样的操作,而最近工作中需要通过C++实现http接口,这个过程想要代码实现得优雅...

  • 1.点击div外部隐藏, //*代表tip_box所包含的子元素 $('body').click(function(e) {var target = $(e.target);if(!target.is('#tip_box *') ) {//事件处理} });    2.div动态展开 .tip_box{width:300px;...

  • Flash在网页显示时,如果不指定其正确的宽度或高度或是按其宽高一定的比例,会变形。 你可以从下面地址参考到怎样取得Flash的宽度或是高度一些信息。http://www.codeproject.com/KB/graphics/ReaderSWFHeader.aspx 为了更好了解,Insus.NET在下面写了一个swf类别(代码部分...