C#软件开发实例.私人订制自己的屏幕截图工具(七)添加放大镜的功能
本实例全部文章目录
(三)托盘图标及菜单的实现
(四)基本截图功能实现
(五)针对拖拽时闪烁卡顿现象的优化
(六)添加配置管理功能
(七)添加放大镜的功能
(八)添加键盘操作截图的功能
(九)使用自定义光标,QQ截图时的光标
(十)在截图中包含鼠标指针形状
由于截图时可能需要精确截取某一部分,所以需要放大镜的功能,这样截取的时候才更容易定位截图的位置。
添加PictureBox,name属性设置为“pictureBox_zoom”;
在“Form1_Load”事件处理函数中添加以下代码:
//设置放大镜的大小this.pictureBox_zoom.Width = this.ZoomBoxWidth;this.pictureBox_zoom.Height = this.ZoomBoxHeight;
在“ExitCutImage”方法中添加代码:
在“Form1_MouseUp”事件处理函数中添加代码:
在“ShowForm”方法的else条件最后添加代码:
if (this.ZoomBoxVisible){UpdateCutInfoLabel(UpdateUIMode.ShowZoomBox);this.pictureBox_zoom.Show();}
在“UpdateCutInfoLabel”函数最后添加以下代码:
if (this.pictureBox_zoom.Visible || (updateUIMode & UpdateUIMode.ShowZoomBox) != UpdateUIMode.None){Point zoomLocation = new Point(MousePosition.X + 15, MousePosition.Y + 22);if (zoomLocation.Y + this.pictureBox_zoom.Height > this.Height){if (zoomLocation.X + this.pictureBox_zoom.Width > this.Width){zoomLocation = new Point(MousePosition.X - this.pictureBox_zoom.Width - 10, MousePosition.Y - this.pictureBox_zoom.Height - 10);}else{zoomLocation = new Point(MousePosition.X + 15, MousePosition.Y - this.pictureBox_zoom.Height - 15);}}else{if (zoomLocation.X + this.pictureBox_zoom.Width > this.Width){zoomLocation = new Point(MousePosition.X - this.pictureBox_zoom.Width - 15, MousePosition.Y);}}this.pictureBox_zoom.Location = zoomLocation;if (!this.pictureBox_zoom.Visible){this.pictureBox_zoom.Show();}}
在“Form1_KeyUp”事件处理函数中添加以下代码:
为“pictureBox_zoom”添加“Paint”事件处理程序,代码如下:
/// <summary>/// 放大镜组件重绘事件处理程序/// 实时显示鼠标指针位置放大后的图像/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void pictureBox_zoom_Paint(object sender, PaintEventArgs e){Bitmap bmp_lbl = new Bitmap(e.ClipRectangle.Width, e.ClipRectangle.Height);int srcWidth = (int)(this.ZoomBoxWidth / 10);int srcHeight = (int)(this.ZoomBoxHeight / 10);Bitmap bmp = new Bitmap(srcWidth, srcHeight);Rectangle srcRect = new Rectangle(MousePosition.X - 5, MousePosition.Y - 4, srcWidth, srcHeight);if (!isCuting){srcRect = new Rectangle(MousePosition.X - 6, MousePosition.Y - 5, srcWidth, srcHeight);}Graphics g = Graphics.FromImage(bmp);g.DrawImage(screenImage, 0, 0, srcRect, GraphicsUnit.Pixel);g.Dispose();//Zoomint x, y;for (int row = 0; row < bmp.Height; row++){for (int col = 0; col < bmp.Width; col++){Color pc = bmp.GetPixel(col, row);for (int h = 0; h < 10; h++){for (int w = 0; w < 10; w++){x = col * 10 + w;y = row * 10 + h;if (x < bmp_lbl.Width && y < bmp_lbl.Height){bmp_lbl.SetPixel(x, y, pc);}}}}}e.Graphics.DrawImage(bmp_lbl, 0, 0);int blockX = e.ClipRectangle.Width / 2;int blockY = e.ClipRectangle.Height / 2;SolidBrush brush = new SolidBrush(Color.FromArgb(10, 124, 202));Pen pen = new Pen(brush, 2.0F);e.Graphics.DrawLine(pen, new Point(0, blockY), new Point(e.ClipRectangle.Width, blockY));e.Graphics.DrawLine(pen, new Point(blockX, 0), new Point(blockX, e.ClipRectangle.Height));g.Dispose();bmp_lbl.Dispose();}
编译,运行,截图看看效果吧!
下一篇:C#软件开发实例.私人订制自己的屏幕截图工具(八)添加键盘操作截图的功能
C#软件开发实例.私人订制自己的屏幕截图工具(七)添加放大镜的功能相关推荐
- C#软件开发实例.私人订制自己的屏幕截图工具——放大镜的功能代码优化
最近在使用屏幕截图工具的时候发现放大镜的功能有点小问题,准星和实际鼠标位置对不上,取到的颜色并不鼠标所在的点颜色,所以去看"C#软件开发实例.私人订制自己的屏幕截图工具(七)添加放大镜的功能 ...
- C#软件开发实例.私人订制自己的屏幕截图工具(九)使用自定义光标,QQ截图时的光标
本实例全部文章目录 (一)功能概览 (二)创建项目.注册热键.显示截图主窗口 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)添加配置管理功能 (七)添加 ...
- C#软件开发实例.私人订制自己的屏幕截图工具(一)功能概览
本实例全部文章目录 (一)功能概览 (二)创建项目.注册热键.显示截图主窗口 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)添加配置管理功能 (七)添加 ...
- C#软件开发实例.私人订制自己的屏幕截图工具(十)在截图中包含鼠标指针形状
本实例全部文章目录 (一)功能概览 (二)创建项目.注册热键.显示截图主窗口 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)添加配置管理功能 (七)添加 ...
- C#软件开发实例.私人订制自己的屏幕截图工具(十)在截图中包括鼠标指针形状...
本实例所有文章文件夹 (一)功能概览 (二)创建项目.注冊热键.显示截图主窗体 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)加入配置管理功能 (七)加 ...
- Android软件开发实例:用客户端写博客
标题:在Android上通过客户端写博客软件开发实例 作者:肖凤斌 binsweet@gmail.com 关注Android很久了,年初买了G4,但一直没有机会尝试Android上的软件开发. 自己有 ...
- openCPU-EC600简介与软件开发实例小结
openCPU-EC600简介与软件开发实例小结 咸鱼NO FASHION EC600系列包含EC600S.EC600N.EC600U等.具体差异如下: 1.EC600S包含2G+4G,单4G模组(9 ...
- 一对一软件开发:在一对一社交app源码中加入这个功能,很有用...
一对一软件开发在年内倍受欢迎,随着社交app的盛行,越来越多的人愿意涉足社交行业,但传统社交平台需要大量资金支持运营,而一对一直播社交平台由于其机制限制,对带宽使用较少.对平台能承受的并发量要求低.所 ...
- 详解AUTOSAR:汽车软件开发V模型过程中AUTOSAR工具链的应用(工具篇—1)
目录 1.PREEvision 2.vVIRTUALtarget 3.DaVinci Developer 4.DaVinci Configurator 5.CANoe 6.VT System 7.CA ...
最新文章
- Python yield 斐波那契数列
- 修改mysql表的itemId字段为自增长SQL语句
- 取模(mod)与取余(rem)的区别——Matlab学习笔记
- 7-153 找鞍点 (20 分)
- java网络编程_Java基础 网络编程
- python 数据可视化利器(bokeh、pyecharts)
- 洛谷OJ测评常见的错误
- fake_useragent导入无法引用的解决方法
- 怎么将flv格式转换成mp4,四个步骤完成转换
- 流程控制的三个练习题的问题,请求解释,谢谢
- 数据结构笔记(王道考研) 第五章:树和二叉树
- html文件引用.vue 文件的方式
- 2个月获得职业技能大赛省赛银牌?!
- Windows 上使用 batch批处理获取时间并更改时间格式
- 上班路上摔了一跤算工伤吗?
- dev.env.js和prod.env.js
- 前端架构设计第六课工程化构建、编译、运行
- linux系统下ipa签名,安装isign 自动签名ipa包
- Servlet 发送电子邮件
- Win10系统将桌面从C盘移动到其他盘的方法
热门文章
- mac终端上传文件到云服务器
- 中国式报表之条件格式设置
- MIT离散数学二元关系笔记
- 树莓派安装免费IP电话系统3CX
- 博士如何出牛文章?浅谈SCI论文发表全攻略
- matlab 自定义距离函数,用MATLAB做聚类分析时非常有用的自定义距离函数和标准化函数...
- 马哥 mysql_马哥学习笔记五——MYSQL初步
- windows提示电脑已经关机了但主机还在运行
- SQL之时间日期类型
- python从excel读彩票数据统计分析,用matplotlib.pyplot做可视图在程序窗口显示,并可动态切换Canvas的可视图,窗口里还添加了菜单和Button按钮工具栏,按钮换图