本实例全部文章目录

由于截图时可能需要精确截取某一部分,所以需要放大镜的功能,这样截取的时候才更容易定位截图的位置。

添加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#软件开发实例.私人订制自己的屏幕截图工具(七)添加放大镜的功能相关推荐

  1. C#软件开发实例.私人订制自己的屏幕截图工具——放大镜的功能代码优化

    最近在使用屏幕截图工具的时候发现放大镜的功能有点小问题,准星和实际鼠标位置对不上,取到的颜色并不鼠标所在的点颜色,所以去看"C#软件开发实例.私人订制自己的屏幕截图工具(七)添加放大镜的功能 ...

  2. C#软件开发实例.私人订制自己的屏幕截图工具(九)使用自定义光标,QQ截图时的光标

    本实例全部文章目录 (一)功能概览 (二)创建项目.注册热键.显示截图主窗口 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)添加配置管理功能 (七)添加 ...

  3. C#软件开发实例.私人订制自己的屏幕截图工具(一)功能概览

    本实例全部文章目录 (一)功能概览 (二)创建项目.注册热键.显示截图主窗口 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)添加配置管理功能 (七)添加 ...

  4. C#软件开发实例.私人订制自己的屏幕截图工具(十)在截图中包含鼠标指针形状

    本实例全部文章目录 (一)功能概览 (二)创建项目.注册热键.显示截图主窗口 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)添加配置管理功能 (七)添加 ...

  5. C#软件开发实例.私人订制自己的屏幕截图工具(十)在截图中包括鼠标指针形状...

    本实例所有文章文件夹 (一)功能概览 (二)创建项目.注冊热键.显示截图主窗体 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)加入配置管理功能 (七)加 ...

  6. Android软件开发实例:用客户端写博客

    标题:在Android上通过客户端写博客软件开发实例 作者:肖凤斌 binsweet@gmail.com 关注Android很久了,年初买了G4,但一直没有机会尝试Android上的软件开发. 自己有 ...

  7. openCPU-EC600简介与软件开发实例小结

    openCPU-EC600简介与软件开发实例小结 咸鱼NO FASHION EC600系列包含EC600S.EC600N.EC600U等.具体差异如下: 1.EC600S包含2G+4G,单4G模组(9 ...

  8. 一对一软件开发:在一对一社交app源码中加入这个功能,很有用...

    一对一软件开发在年内倍受欢迎,随着社交app的盛行,越来越多的人愿意涉足社交行业,但传统社交平台需要大量资金支持运营,而一对一直播社交平台由于其机制限制,对带宽使用较少.对平台能承受的并发量要求低.所 ...

  9. 详解AUTOSAR:汽车软件开发V模型过程中AUTOSAR工具链的应用(工具篇—1)

    目录 1.PREEvision 2.vVIRTUALtarget 3.DaVinci Developer 4.DaVinci Configurator 5.CANoe 6.VT System 7.CA ...

最新文章

  1. Python yield 斐波那契数列
  2. 修改mysql表的itemId字段为自增长SQL语句
  3. 取模(mod)与取余(rem)的区别——Matlab学习笔记
  4. 7-153 找鞍点 (20 分)
  5. java网络编程_Java基础 网络编程
  6. python 数据可视化利器(bokeh、pyecharts)
  7. 洛谷OJ测评常见的错误
  8. fake_useragent导入无法引用的解决方法
  9. 怎么将flv格式转换成mp4,四个步骤完成转换
  10. 流程控制的三个练习题的问题,请求解释,谢谢
  11. 数据结构笔记(王道考研) 第五章:树和二叉树
  12. html文件引用.vue 文件的方式
  13. 2个月获得职业技能大赛省赛银牌?!
  14. Windows 上使用 batch批处理获取时间并更改时间格式
  15. 上班路上摔了一跤算工伤吗?
  16. dev.env.js和prod.env.js
  17. 前端架构设计第六课工程化构建、编译、运行
  18. linux系统下ipa签名,安装isign 自动签名ipa包
  19. Servlet 发送电子邮件
  20. Win10系统将桌面从C盘移动到其他盘的方法

热门文章

  1. mac终端上传文件到云服务器
  2. 中国式报表之条件格式设置
  3. MIT离散数学二元关系笔记
  4. 树莓派安装免费IP电话系统3CX
  5. 博士如何出牛文章?浅谈SCI论文发表全攻略
  6. matlab 自定义距离函数,用MATLAB做聚类分析时非常有用的自定义距离函数和标准化函数...
  7. 马哥 mysql_马哥学习笔记五——MYSQL初步
  8. windows提示电脑已经关机了但主机还在运行
  9. SQL之时间日期类型
  10. python从excel读彩票数据统计分析,用matplotlib.pyplot做可视图在程序窗口显示,并可动态切换Canvas的可视图,窗口里还添加了菜单和Button按钮工具栏,按钮换图