当前位置: 首页 > 编程日记 > 正文

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{/// <summary>/// 截图转换成bitmap/// </summary>/// <param name="element"></param>/// <param name="width">默认控件宽度</param>/// <param name="height">默认控件高度</param>/// <param name="x">默认0</param>/// <param name="y">默认0</param>/// <returns></returns>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;}/// <summary>/// BitmapSource转Bitmap/// </summary>/// <param name="source"></param>/// <returns></returns>public static Bitmap BitmapSourceToBitmap(this BitmapSource source){return BitmapSourceToBitmap(source, source.PixelWidth, source.PixelHeight);}/// <summary>/// Convert BitmapSource to Bitmap/// </summary>/// <param name="source"></param>/// <returns></returns>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); }
     }

前台代码:

 <Grid Background="Gray" Name="StudentInfoGrid"><Label Content="学号" Height="28" HorizontalAlignment="Left" Margin="54,23,0,0" Name="labelStudentId" VerticalAlignment="Top" /><TextBox Text="{Binding Student.StudentId}" IsReadOnly="True" Height="23" HorizontalAlignment="Right" Margin="0,27,289,0" Name="textBoxStudentId" VerticalAlignment="Top" Width="120" /><Label Content="姓名" Height="28" HorizontalAlignment="Left" Margin="54,61,0,0" Name="labelStudentName" VerticalAlignment="Top" /><TextBox Text="{Binding Student.StudentName}" IsReadOnly="True" Height="23" HorizontalAlignment="Left" Margin="94,65,0,0" Name="textBoxStudentName" VerticalAlignment="Top" Width="120" /><Label Content="年龄" Height="28" HorizontalAlignment="Left" Margin="54,94,0,0" Name="labelStudentAge" VerticalAlignment="Top" /><TextBox Text="{Binding Student.StudentAge}" IsReadOnly="True" Height="23" HorizontalAlignment="Left" Margin="94,99,0,0" Name="textBoxStudentAge" VerticalAlignment="Top" Width="120" /><Label Content="Email" Height="28" HorizontalAlignment="Left" Margin="50,138,0,0" Name="labelStudentEmail" VerticalAlignment="Top" /><TextBox Text="{Binding Student.StudentEmail}" IsReadOnly="True" Height="23" HorizontalAlignment="Left" Margin="94,141,0,0" Name="textBoxStudentEmail" VerticalAlignment="Top" Width="120" /><Label Content="性别" Height="28" HorizontalAlignment="Left" Margin="57,176,0,0" Name="labelStudentSex" VerticalAlignment="Top" /><TextBox Text="{Binding Student.StudentSex}" IsReadOnly="True" Height="23" HorizontalAlignment="Left" Margin="94,180,0,0" Name="textBoxStudentSex" VerticalAlignment="Top" Width="120" /><Button Command="{Binding ShowCommand}" Content="显示" Height="23" HorizontalAlignment="Left" Margin="345,27,0,0" Name="buttonShow" VerticalAlignment="Top" Width="75" /><Button Content="控件截图" Name="BitMapBtn" Click="BitMapBtn_Click"Width="60" Height="30" Margin="0,30"></Button></Grid>

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

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

相关文章:

【java】兴唐第二十一节(LinkedList和泛型)

LinkedList知识点 1、实现了Iterable接口的类具有迭代功能。 2、List接口为Collection的子类&#xff0c;表示线形数据列表&#xff0c;其实现类有&#xff1a;ArrayList(数组线性表)与LinkedList(链表) 算了不多说了&#xff0c;上图吧 3、ArrayList是一个可变数组&#xff…

Elgg网站迁移指南

转载地址&#xff1a; http://blog.sina.com.cn/s/blog_84068de60100vr21.html Elgg官方文档上的网站迁移部分是有问题的——缺少了一些重要步骤&#xff0c;而且过程更麻烦。正确的方法如下&#xff1a; 备份网站文件&#xff0c;包括uploads文件夹导出数据库在数据库文件中&a…

INFO:在InstallShield中修改安装包压缩.cab包的大小

如果我们用InstallShield打包一个数据非常大的安装包&#xff08;Basic MSI和InstallScript MSI工程类型&#xff09;&#xff0c;默认情况下安装包会产生多个.cab文件&#xff0c;这里简单说明我们如何修改安装包中.cab文件的大小。首先&#xff0c;有个信息大家需要知道&…

MEF依赖注入实例

什么是MEF 先来看msdn上面的解释&#xff1a;MEF(Managed Extensibility Framework)是一个用于创建可扩展的轻型应用程序的库。 应用程序开发人员可利用该库发现并使用扩展&#xff0c;而无需进行配置。 扩展开发人员还可以利用该库轻松地封装代码&#xff0c;避免生成脆弱的硬…

Data - 数据思维 - 上篇

1 - 概念与定义 如果分析思维是一种结构化思考的体现&#xff0c;那么数据分析思维&#xff08;简称数据思维&#xff09;则是以数据为依托的结构化分析方式。 不同于“我觉得”、“以前是怎样”、“其他人如何”这些直觉化、经验化、类比化的思考方式&#xff0c;数据思维是以…

新生选课系统使用指南

建议选用IE6或者IE7浏览器。 打开浏览器&#xff0c;地址栏输入202.200.112.200&#xff0c; 或者202.200.112.202&#xff0c; 或者202.200.112.210。按回车键。 输入学号和身份证号&#xff08;如果修改过密码&#xff0c;则输入新密码&#xff09;。点“登录”。 点 “学生…

【java】兴唐第二十三节课(暑期第一节TreeSet)

预警&#xff1a;进入暑期培训的博主即将高产似母猪&#xff0c;敬请博友期待。 1、给类添加构造方法 alt shift s 选择Generate Construct using Fields 2、map两种遍历方法 方法一&#xff1a; 获取所有的key值&#xff0c;根据key值获取value值 代码实现&#xff1a; Se…

程序设计分析(开篇)——混沌初开,顿悟设计

一直以来&#xff0c;不断的进行着项目的设计、开发&#xff0c;然而&#xff0c;差的设计&#xff0c;痛苦的维护、编码&#xff0c;让我不断的审视自己的设计是否有问题&#xff0c;在最近的一些思考、理解中&#xff0c;终于有了一些领悟&#xff0c;总结一下过去的设计&…

源代码管理工具调查

任务说明&#xff1a; 一、找出并了解当前较为流行的几种源代码管理工具&#xff08;至少三种&#xff09;&#xff1b; 1、 Visual Source Safe( 简称 VSS )2、 SVN(Subversion) - CVS(Concurrent Version System)的替代和升级版本3、 ClearCase 二、建立表格对这些源代码管理…

从零开始学Go之接口(一):接口

接口是双方约定的一种合作协议。接口实现者不需要关心接口会被怎样使用&#xff0c;调用者也不需要关心接口的实现细节。 接口是一种类型&#xff0c;也是一种抽象结构&#xff0c;不会暴露所含数据的格式、类型及结构。 声明&#xff1a; 接口类型是由一组方法签名定义的集合 …

【java】兴唐第二十四节课

HashMap中put函数的源码分析&#xff1a; &#xff08;一&#xff09;知识点&#xff1a; 1、方法resize&#xff08;&#xff09;的作用是扩容 2、 if ((p tab[i (n - 1) & hash]) null)其中n-1代表最后一个元素的下标&#xff0c;经过和hash的&后获取当前存储nod…

找不到可安装的ISAM”的问题

问题描述&#xff1a; 在 Access 或Sql Server中收到“Could not find installable ISAM”&#xff08;找不到可安装的 ISAM&#xff09;错误信息或者丢失某些文件类 解决方法&#xff1a; 1.注册表编辑器使用不当可能导致严重问题&#xff0c;可能需要重新安装操作系统。Micro…

修改mysql的时间/时区

# 背景 往db中insert数据发现时间不对&#xff0c;因为是新DB&#xff0c;所以猜测是mysql设置不对 # 解决方法 方法一&#xff1a;通过mysql命令行模式下动态修改 show variables like "%time_zone%"; 查看时区 --------------------------| Variable_name | Value…

【java】兴唐第二十五节课(异常和log4j的使用)

异常 1、try catch finally语法&#xff08;附带多重catch&#xff09; 代码实现&#xff1a; public static void main(String[] args) {try {int i 1/0;}catch(ArithmeticException e){System.out.println("出现数学运算异常&#xff1a;" e);}catch(ArrayIndex…

CentOS 命令提示符颜色及样式详解

命令提示符&#xff1a;prompt CentOS下查看当前命令提示符格式&#xff1a; 1 [rootlocalhost ~]# echo $PS1 #显示当前使用的PS1样式 2 [\u\h \W]\$ 命令提示符参数如下&#xff1a; \d &#xff1a;#代表日期&#xff0c;格式为weekday month date&#xff0c;例如&#…

Max_user_connections 与Max_connections 与max_connect_errors

对于连接数的设置&#xff0c;show variables里有三个参数可以对它进行控制&#xff0c;max_connections与max_user_connections以及max_connect_errors。下面对这三个参数相关描述。 max_connections&#xff1a;针对所有的账号所有的客户端并行连接到MYSQL服务的最大并行连接…

压力变动力,存储追求高效率

企业的数据存储量每年都要大幅增长&#xff0c;但是IT预算呈现紧缩趋势。这就是企业面临的最大存储难题&#xff0c;即如何平衡数据增长与提高存储利用率和降低成本之间的关系。 非结构化数据带来的难题 存储最直接的压力来自于不断增长的数据量。今天&#xff0c;我们面对的是…

Hadoop学习之路(三)Hadoop-2.7.5在CentOS-6.7上的编译

下载Hadoop源码 1、登录官网 2、确定你要安装的软件的版本 一个选取原则&#xff1a; 不新不旧的稳定版本 几个标准&#xff1a; 1&#xff09;一般来说&#xff0c;刚刚发布的大版本都是有很多问题 2&#xff09;应该选择某个大版本中的最后一个小版本 阅读编译文档 1、准备一…

static String valueOf(XXX xxx)

1 package day01;2 /**3 * static String valueOf(XXX xxx)4 * 字符串提供了一组静态的重载的valueOf方法,作用5 * 是将其他类型转换为字符串6 * author ta7 *8 */9 public class Demo10 { 10 public static void main(String[] args) { 11 int a 123; 12 …

【java】兴唐第二十五节课小程序学生卡转账小系统(自己写的异常)

1、StuCard.java public class StuCard {public static void TransMoney(int source, int money, int target) {money - target;if(money < 0) {throw new NotEnoughMoneyException("余额不足");}System.out.println("商家的余额为&#xff1a;" sour…

【JQUBAR1.1】jQuery 插件发布

【JQUBAR1.1】jQuery 插件发布 JQUBAR1.1 简介 2010-11-22在博客园发布了柱状图JQUBar1.0 jQuery 插件。现将该插件升级为1.1版本。 1.1版本修复了部分bug&#xff0c;同时新增以下功能&#xff1a; 1.可自定义坐标颜色 2.可自定义X,Y轴坐标名称 3.Y轴动态坐标自动建立 4.Y…

ssh远程操作服务器

登录方式 ssh account192.168.xxx.xxx 输入密码 远程上传下载文件 上传&#xff1a; scp filepath acount192.168.xxx.xxx:path filepath为要上传的文件路径path为上传到服务器的储存路径 下载&#xff1a; scp acount192.168.xxx.xxx:filepath path filepath为要下载的文件路径…

【java】兴唐第二十三节课作业

已知如下&#xff1a; 下表为某班级四次考试成绩单&#xff0c; 要求使用HashMap<String, Integer>存储每次考试的成绩&#xff08;key键为姓名&#xff0c;value为成绩&#xff09;。要求使用LinkedList存储考试次数&#xff0c;有几次考试就有几个HashMap注意&#xf…

Data - 数据思维 - 中篇

6 - 模型与框架 利用现有的成熟的理论、模型与框架&#xff0c;结合实际业务情况&#xff0c;搭建分析框架&#xff0c;尽量确保数据分析维度的完整性&#xff0c;结果的有效性及正确性。 营销理论模型&#xff1a;4P、用户使用行为、STP理论、SWOT等。管理理论模型&#xff1a…

快速设置戴尔latitude笔记本的触摸板和指点杆

// TouchPadSettings.cpp : Defines the entry point for the console application.// by windviki 2010/08/31// 转载请注明出处。//// 办公用的戴尔笔记本除了触摸板&#xff0c;还在键盘中间有一个指点杆&#xff08;point stick&#xff09;// 打字很不习惯&#xff0c;经常…

Ubuntu 10.10系统安装手记

原来一直在公司用Ubuntu&#xff0c;感觉做开发是相当不错的&#xff0c;特别那种各种利用命令的方式真是太高效了。所以现在想把笔记本也装上&#xff0c;弄了半天&#xff0c;也遇到不少问题&#xff0c;记下来备忘一下。 虚拟机还是双系统 磁盘里面好多东西&#xff0c;基本…

php值传参,引用传参以及对象传参

传值&#xff1a;是把实参的值赋值给行参 &#xff0c;那么对行参的修改&#xff0c;不会影响实参的值传引用 &#xff1a;真正的以地址的方式传递参数传递以后&#xff0c;行参和实参都是同一个对象&#xff0c;只是他们名字不同而已对行参的修改将影响实参的值说明&#xff1…

用一行代码高效的求一个列表的平方和

最近看到一个笔试题&#xff0c;考察的都是 Python 中的高阶函数 题目如下&#xff1a;用一行代码高效的求一个列表的平方和(不能用 sum 函数) 分析 1.先将列表中每个值作平方&#xff1a; 立即想到 map 函数&#xff0c;假设列表是 range(10)&#xff0c;那么这个列表中平方是…

【java】第二十二节课(HashSet)

1、使用HashSet建立对象、添加元素并使用两种方法遍历 代码实现 public class SetDemo {public static void main(String[] args) {Set<String> set new HashSet();set.add("猴子");set.add("八戒");set.add("唐僧");set.add("沙僧…

转:在 .NET 中实现异步回调访问数据库

在 .NET 中实现异步回调访问数据库 时间:2009-11-17 19:52来源:网络收集 作者:佚名 点击: 334 次 技术论坛某些场合下&#xff0c;在对数据库进行访问时&#xff0c;为了避免同步访问数据时所带来的延迟&#xff0c;我们需要改进设计&#xff0c;以提高程序执行效率。一方面&am…