`
testcs_dn
  • 浏览: 113835 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

C#软件开发实例.私人订制自己的屏幕截图工具(七)添加放大镜的功能

 
阅读更多

上一篇: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#软件开发实例.私人订制自己的屏幕截图工具(四)基本截图功能实现

    此代码对应于博客文章:C#软件开发实例.私人订制自己的屏幕截图工具(四)基本截图功能实现,文章链接:http://blog.csdn.net/testcs_dn/article/details/23346683

    【源码】C#软件开发实例.私人订制自己的屏幕截图工具(六)添加配置管理功能

    此代码对应于博客文章:C#软件开发实例.私人订制自己的屏幕截图工具(六)添加配置管理功能,文章链接:http://blog.csdn.net/testcs_dn/article/details/24466763

    C#软件开发实例.私人订制自己的屏幕截图工具中使用的光标文件

    在C#软件开发中,创建一个自定义的屏幕截图工具是一项常见的任务,它涉及到图形用户界面(GUI)的交互和图像处理技术。本实例重点讨论的是如何在这样的工具中使用自定义的光标文件,以提供更加个性化的用户体验。...

    C# 屏幕放大镜 实例源码(系统操作)

    本实例源码涉及的是利用C#实现一个屏幕放大镜功能,这是一个常见的实用工具,可以帮助用户方便地查看屏幕上的微小细节。下面我们将深入探讨这个话题,了解如何使用C#进行系统操作以创建屏幕放大镜。 首先,屏幕放大...

    ArcGIS Engine + C# 实例开发教程.pdf

    【ArcGIS Engine + C# 实例开发教程】是面向ArcGIS Engine初学者的一份详细教程,旨在帮助读者理解和掌握基于C#语言使用Visual Studio 2005开发GIS桌面应用程序的技术。教程的目标是使读者能够深入理解ArcGIS Engine...

    C#精彩实例教程.pdf

    C#精彩实例教程.pd 很好一本入门教程

    ArcGIS+Engine+C#实例开发教程.pdf

    ArcGIS+Engine+C#实例开发教程.pdf

    200个经典C#WinForm实例源码.rar

    《C# WinForm实例解析——200个经典...通过深入学习这200个经典实例,你将能够全面掌握C# WinForm开发,提升自己的编程技巧,为日后的项目开发打下坚实基础。每一个源码都是一个宝贵的教育资源,值得反复研读和实践。

    C#编写的屏幕放大镜

    标题 "C#编写的屏幕放大镜" 涉及到的是使用C#编程语言开发的一种实用工具,即屏幕放大镜。屏幕放大镜是一种能够帮助用户查看屏幕上内容的辅助软件,尤其对视力不佳或需要精细查看图像的人来说非常有用。C#是微软公司...

    C# winform窗体图片放大镜

    本文将深入探讨如何利用C#实现一个WinForm窗体中的图片放大镜功能。这个功能允许用户在界面上自由放大图片,查看图像的细节部分。 首先,我们需要创建一个新的WinForm项目。在Visual Studio中,选择"文件" -&gt; "新建...

    c# 钩子实例—放大镜

    总的来说,这个“放大镜”实例涵盖了C#基础、Windows编程、图形处理等多个方面,对于深入理解Windows应用程序开发和C#钩子技术具有很高的学习价值。通过这个实例,开发者可以了解到如何在C#中实现一个实用的小工具,...

    C#软件开发实例,谨供参考

    基于C#的软件开发实例,可供程序人员参考

    Simple Magnifier(C#编写的屏幕放大镜)

    《Simple Magnifier:C# 编写的屏幕放大镜详解》 在计算机应用领域,辅助工具往往能提升用户体验,尤其对于视觉需求较高的用户来说,屏幕放大镜是一个不可或缺的实用工具。"Simple Magnifier"是由otigli开发的一款...

    C#多功能放大镜源码

    在本文中,我们将深入探讨"C#多功能放大镜源码"这一项目,它是一个基于C#编程语言实现的实用工具,允许用户自定义放大镜的大小、放大倍率和形状。这个项目的实现涉及到多种核心技术,包括鼠标钩子、GDI+图形库、双...

    利用c#窗体winform实现基础放大镜功能

    利用c#窗体winform实现基础放大镜功能,不错的小练习,附带图片,谁下载谁知道,无敌放大镜,希望大家私信讨论问题,一起成为c#大师,月薪突破3w,加油冲冲冲!

    ArcGIS Engine+C#实例开发教程.rar

    《ArcGIS Engine+C#实例开发教程》是一份深入讲解如何使用ArcGIS Engine结合C#进行地理信息系统(GIS)开发的详细教程。ArcGIS Engine是Esri公司提供的一个强大的开发工具,它允许开发者创建桌面、移动和Web应用程序...

    C#写的放大镜程序,模拟真实放大镜的效果V2

    标题中的"C#写的放大镜程序,模拟真实放大镜的效果V2"揭示了这是一个使用C#编程语言开发的应用程序,其核心功能是实现一个虚拟的放大镜工具,版本为V2,意味着这是对原有版本的升级或优化。这个程序能够模拟实际放大...

    C#371-屏幕放大镜代源码

    屏幕放大镜是一种实用工具,它允许用户通过软件方式放大计算机屏幕上显示的内容,这对于视力不佳或者需要查看精细细节的用户尤其有用。在C#编程环境中,我们可以利用Windows Forms或WPF等框架来实现这样的功能。本...

    C# 网络通信开发训练实例

    C# 网络通信开发训练-32个实例 C# 网络通信开发训练 实例01 更改计算机名称...... 670 实例02 通过计算机名获取IP地址...... 672 实例03 通过IP地址获取主机名称...... 673 实例04 修改本机IP地址...... 674...

Global site tag (gtag.js) - Google Analytics