首页 C#鼠标选择框截图代码

C#鼠标选择框截图代码

举报
开通vip

C#鼠标选择框截图代码截图代码 Posted on 2007-07-16 13:02 小y 阅读(6925) 评论(20) 编辑 收藏 可以利用Graphics类的CopyFromScreen方法来实现屏幕截取,舍弃了比较麻烦的API函数,只要几句代码就能实现了,而且这个这个方法能实现只抓取部分区域的屏幕,可以实现类似qq抓屏的功能。 using System; using System.Collections.Generic; using System.Text; using System.Drawing; using...

C#鼠标选择框截图代码
截图代码 Posted on 2007-07-16 13:02 小y 阅读(6925) 评论(20) 编辑 收藏 可以利用Graphics类的CopyFromScreen方法来实现屏幕截取,舍弃了比较麻烦的API函数,只要几句代码就能实现了,而且这个这个方法能实现只抓取部分区域的屏幕,可以实现类似qq抓屏的功能。 using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms; namespace ConsoleApplication1 ...{ class Program ...{ static void Main(string[] args) ...{ //获得当前屏幕的分辨率 Screen scr = Screen.PrimaryScreen; Rectangle rc = scr.Bounds; int iWidth = rc.Width;   int iHeight = rc.Height; //创建一个和屏幕一样大的Bitmap Image myImage = new Bitmap(iWidth, iHeight); //从一个继承自Image类的对象中创建Graphics对象 Graphics g = Graphics.FromImage(myImage); //抓屏并拷贝到myimage里 g.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(iWidth, iHeight)); //保存为文件 myImage.Save(@"c:/1.jpeg"); } } } 以上内容转自lijgame的blog,在此对作者表示感谢! 原文地址: 现在就文中的“实现QQ截屏”功能继续研究如下。 1、首先要实现在屏幕上画图,即:可以在屏幕上画出一个矩形框,双击该矩形框将截取矩形框内的屏幕。 目前在屏幕上画图的C#实现代码如下: [DllImport("User32.dll")] public extern static System.IntPtr GetDC(System.IntPtr hWnd);    private void button19_Click(object sender, EventArgs e) { System.IntPtr   DesktopHandle   =   GetDC(System.IntPtr.Zero); Graphics g = Graphics.FromHdc(DesktopHandle); g.DrawRectangle(new Pen(Color.Red),new Rectangle(10,10,100,100)); } 需要用到可恶的API,实在不想用这种方法来实现! 2、研究出QQ屏幕上画图的真相 继续研究QQ截图的功能,发现当点击“截图”按钮之后,屏幕变成静止的了,原先网页上跳动的东西都不动了,哈哈,原因很简单,QQ截取了整个屏幕,然后用这张静止的屏幕覆盖全屏,真是精妙的解决办法啊! 于是用C#实现是: 建一个子窗体ScreenForm ,在窗体上放一个pictureBox和一个label控件。ScreenForm代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace copyScreen { public partial class ScreenForm : Form { public ScreenForm() { InitializeComponent(); } public event copyToFatherTextBox copytoFather;  //截屏完毕后交个父窗体处理截图 public bool begin = false;   //是否开始截屏 public bool isDoubleClick = false; public Point firstPoint = new Point(0, 0);  //鼠标第一点 public Point secondPoint = new Point(0, 0);  //鼠标第二点 public Image cachImage = null;  //用来缓存截获的屏幕 public int halfWidth = 0;//保存屏幕一半的宽度 public int halfHeight = 0;//保存屏幕一般的高度 /*复制整个屏幕,并让窗体填充屏幕*/ public void copyScreen() { Rectangle r = Screen.PrimaryScreen.Bounds; Image img = new Bitmap(r.Width, r.Height); Graphics g = Graphics.FromImage(img); g.CopyFromScreen(new Point(0, 0), new Point(0, 0), r.Size); //窗体最大化,及相关处理 this.Width = r.Width; this.Height = r.Height; this.Left = 0; this.Top = 0; pictureBox1.Width = r.Width; pictureBox1.Height = r.Height; pictureBox1.BackgroundImage = img; cachImage = img; halfWidth = r.Width / 2; halfHeight = r.Height / 2; this.Cursor = new Cursor(GetType(), "MyCursor.cur");   } private void ScreenForm_Load(object sender, EventArgs e) { copyScreen(); } /*鼠标按下时开始截图*/ private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { if(!isDoubleClick) { begin = true; firstPoint = new Point(e.X, e.Y); changePoint(e.X, e.Y); msg.Visible = true; } } /*鼠标移动时显示截取区域的边框*/ private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (begin) { //获取新的右下角坐标 secondPoint = new Point(e.X, e.Y); int minX = Math.Min(firstPoint.X, secondPoint.X); int minY = Math.Min(firstPoint.Y, secondPoint.Y); int maxX = Math.Max(firstPoint.X, secondPoint.X); int maxY = Math.Max(firstPoint.Y, secondPoint.Y); //重新画背景图 Image tempimage = new Bitmap(cachImage); Graphics g = Graphics.FromImage(tempimage); //画裁剪框 g.DrawRectangle(new Pen(Color.Red),minX,minY,maxX-minX,maxY-minY); pictureBox1.Image = tempimage; //计算坐标信息 msg.Text = "左上角坐标:(" + minX.ToString() + "," + minY.ToString() + ")\r\n"; msg.Text += "右下角坐标:(" + maxX.ToString() + "," + maxY.ToString() + ")\r\n"; msg.Text += "截图大小:" + (maxX - minX) + "×" + (maxY - minY) + "\r\n"; msg.Text += "双击任意地方结束截屏!"; changePoint((minX + maxX) / 2, (minY + maxY) / 2); } } /*动态调整显示信息的位置,输入参数为当前截屏鼠标位置*/ public void changePoint(int x, int y) { if (x < halfWidth) { if (y < halfHeight) { msg.Top = halfHeight; msg.Left = halfWidth; } else { msg.Top = 0; msg.Left = halfWidth; } } else { if (y < halfHeight) { msg.Top = halfHeight; msg.Left = 0; } else { msg.Top = 0; msg.Left = 0; } } } /*鼠标放开时截图操作完成*/ private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { begin = false; isDoubleClick = true; //之后再点击就是双击事件了 } /*双击时截图时, 通知 关于发布提成方案的通知关于xx通知关于成立公司筹建组的通知关于红头文件的使用公开通知关于计发全勤奖的通知 父窗体完成截图操作,同时关闭本窗体*/ private void pictureBox1_DoubleClick(object sender, EventArgs e) { if (firstPoint != secondPoint) { int minX = Math.Min(firstPoint.X, secondPoint.X); int minY = Math.Min(firstPoint.Y, secondPoint.Y); int maxX = Math.Max(firstPoint.X, secondPoint.X); int maxY = Math.Max(firstPoint.Y, secondPoint.Y); Rectangle r = new Rectangle(minX, minY, maxX - minX, maxY - minY); copytoFather(r); } this.Close(); //msg.Text = r.ToString(); } } } 界面如下:
本文档为【C#鼠标选择框截图代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_219945
暂无简介~
格式:doc
大小:60KB
软件:Word
页数:9
分类:互联网
上传时间:2019-01-20
浏览量:109