上一篇:C#软件开发实例.私人订制自己的屏幕截图工具(六)添加配置管理功能
由于截图时可能需要精确截取某一部分,所以需要放大镜的功能,这样截取的时候才更容易定位截图的位置。
添加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#软件开发实例.私人订制自己的屏幕截图工具(四)基本截图功能实现,文章链接:http://blog.csdn.net/testcs_dn/article/details/23346683
此代码对应于博客文章:C#软件开发实例.私人订制自己的屏幕截图工具(六)添加配置管理功能,文章链接:http://blog.csdn.net/testcs_dn/article/details/24466763
C#软件开发实例.私人订制自己的屏幕截图工具中使用的光标文件,参考:http://blog.csdn.net/testcs_dn/article/details/30835107
C#精彩实例教程.pd 很好一本入门教程
《C#开发实例大全(基础卷)》筛选、汇集了C#开发从基础知识到高级应用各个层面约600个实例及源代码,每个实例都按实例说明、关键技术、设计过程、详尽注释、秘笈心法的顺序进行了分析解读。全书分6篇共25章,主要...
ArcGIS+Engine+C#实例开发教程.pdf
C# 屏幕放大镜 实例源码(系统操作)
C# Gps定位实例.rar 取手机位置
基于C#的软件开发实例,可供程序人员参考
c#皮肤实例源码.c#皮肤实例源码.c#皮肤实例源码.c#皮肤实例源码.c#皮肤实例源码.
ArcGIS Engine + C# 实例开发教程
c#软件开发实例 三个基础c#软件开发实例,入门学习参考实例
C#通讯录实例C#通讯录实例C#通讯录实例
使用c#编写winform窗体图片放大镜功能,该实例中图片可以随意放大倍数
ArcGIS Engine C#实例开发教程.pdf
C# 网络通信开发训练-32个实例 C# 网络通信开发训练 实例01 更改计算机名称...... 670 实例02 通过计算机名获取IP地址...... 672 实例03 通过IP地址获取主机名称...... 673 实例04 修改本机IP地址...... 674...
此实例包含了多个C#语言中Engine的开发实例代码。
第18章 C#高级开发....... 781 18.1 Windows服务开发...... 782 实例487 将局域网聊天程序开发成Windows服务...... 782 18.2 Remoting分布式开发...... 789 实例488 运用Remoting实现文件传送...... 789 实例...
C# 开发实例大全(基础卷).pdf