上一篇:C#软件开发实例.私人订制自己的屏幕截图工具(六)加入配置管理功能

因为截图时可能须要精确截取某一部分,所以须要放大镜的功能,这样截取的时候才更easy定位截图的位置。

加入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(); //Zoom
int 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#软件开发实例.私人订制自己的屏幕截图工具(九)使用自己定义光标,QQ截图时的光标

    版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢. https://blog.csdn.net/testcs_dn/article/details/ ...

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

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

  3. Java Native Interface 基于JNI的嵌入式手机软件开发实例

    1.通过JNI和c/c++的库组件.其他代码交互 2.java和c不能互通的原因时数据类型问题 Introduction https://docs.oracle.com/javase/8/docs/t ...

  4. 【网络爬虫】【python】网络爬虫(二):网易微博爬虫软件开发实例(附软件源码)

    对于urllib2的学习,这里先推荐一个教程<IronPython In Action>,上面有很多简明例子,并且也有很详尽的原理解释:http://www.voidspace.org.u ...

  5. 音频软件开发中的debug方法和工具

    本文系作者原创.如转载,请注明出处. 谢谢! 音频软件开发同其他软件开发一样,都需要去调试.音频软件调试同其他软件调试方法有相同的地方,也有不同的地方,同时调试时还需要借助一些专门的工具,有了这些方法 ...

  6. C#软件开发实例.个人定制自己的屏幕抓图工具(八)加入了截图功能键盘

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

  7. Maven&mdash;&mdash;软件开发中一个神奇的项目管理工具

    由于本人是从c++转入从事JAVA工作的 所以很多东西要从头学起,相信有很多跟我一样的人吧,那么我们一起来学习. 今天我们一起来认识下Maven这个工具,很多人可能会问题了,为什么说是工具呢?不是写代 ...

  8. 软件开发学习笔记 <二>软件开发模型、Up、Rup、敏捷Up

    软件开发过程(process) 是一个将用户需求转化为软件系统所需要的活动的集合. 软件生命周期(SDLC,Software Devlopment Life Cycle) 软件从孕育.诞生.成长.成熟 ...

  9. SDKMAN 软件开发工具包管理器

    SDKMAN 是用来在类Unix 系统中管理多个版本的开发环境的工具.提供命令行接口来安装.切换.删除.列出候选版本. SDKMAN!是在大多数基于Unix的系统上管理多个软件开发套件的并行版本的工具 ...

随机推荐

  1. Android控件属性大全[整理转载]

    控件属性: android属性 Android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了网上不少资料, 第一类:属性值为true或falseandroid:layout_ ...

  2. Hacker(22)----解除系统中的密码

    Win7系统中,用户可以设置BIOS密码以及系统登录密码,这些密码都有各自的用途.但对黑客而言,完全可以采用不同的方式绕过这些密码.下面介绍黑客如如何接触这些密码. 一.解除BIOS密码 BIOS密码 ...

  3. MVC5移除不常用Nuget命令

    ---移除JQuery.* 和bootstartp Uninstall-Package bootstrap Uninstall-Package Microsoft.jQuery.Unobtrusive ...

  4. 返回ipv 地址

    //返回ipv 地址 public static string GetIP4Address() { string IP4Address = String.Empty; foreach (IPAddre ...

  5. Wireshark 使用教程

    原文出处   http://blog.sina.com.cn/s/blog_5d527ff00100dwph.html Wireshark是世界上最流行的网络分析工具.这个强大的工具可以捕捉网络中的数 ...

  6. 工欲善其事必先利其器---SQL在线可视化模型设计,(还可学习拖拽知识)

    作为技术人员,在开发项目中,不可避免的要跟数据库打交道,一个完整的项目正常情况下是讨论完整体需求,有了大致的框框在脑海中后,是需要设计合理的数据库的,这时会有其他的专业的UML建模工具可以使用, 但是 ...

  7. java web实现img读取盘符下的图像

    最近做了一个项目,用户上传图片后通过img控件显示出来.大家都知道img通过src属性就可以显示图片.如<img src="http://127.0.0.1/a/b/abc.jpg&q ...

  8. CUICatalog: Invalid asset name supplied:

    [UIImage imageNamed:name];但是这个name却是空的,所以就报了这个错了. 解决方法,在项目中搜索UIImage imageNamed:,然后打印看看所谓的name是否为空.找 ...

  9. React/React Native的 ES5 ES6 写法对照

      ES5 ES6 模块 var React = require("react-native); var { Image, Text, View } = React;   import Re ...

  10. 清除大文本中的html标签

    public String clearHtmlText(String inputString) { if (StringUtils.isBlank(inputString)) { return &qu ...