为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

C# 实用截屏

2011-10-16 7页 doc 147KB 48阅读

用户头像

is_922152

暂无简介

举报
C# 实用截屏C# 实用截屏 模拟QQ抓屏 发表时间:2010-9-27  阅读数:45   网友评论:0 条 源码下载 实现的功能如下: 1、彩色光标,在.Net中实现光标嵌入资源文件需要变换一下思路。 2、可以抓到悬浮窗等LayeredWindow。 3、矩形选择,并可调整矩形的大小和位置,限定选择域不超出屏幕。已有选择的情况下,仍可以按下左键再画矩形选框,觉得这样做更加方便用户使用。 4、截屏遮罩效果。如图,矩形选择框内高亮显示,外面有遮罩效果。 5、信息提示面板,提示选择大小和当前点的RGB值。 6、右键菜单。 7、关于csharp...
C# 实用截屏
C# 实用截屏 模拟QQ抓屏 发表时间:2010-9-27  阅读数:45   网友评论:0 条 源码下载 实现的功能如下: 1、彩色光标,在.Net中实现光标嵌入资源文件需要变换一下思路。 2、可以抓到悬浮窗等LayeredWindow。 3、矩形选择,并可调整矩形的大小和位置,限定选择域不超出屏幕。已有选择的情况下,仍可以按下左键再画矩形选框,觉得这样做更加方便用户使用。 4、截屏遮罩效果。如图,矩形选择框内高亮显示,外面有遮罩效果。 5、信息提示面板,提示选择大小和当前点的RGB值。 6、右键菜单。 7、关于csharpwin截屏,它是个很好的截屏控件。 效果图: 实现原理   在没做过截屏之前,感觉这个功能挺神秘、高深的。做过之后感觉挺简单的。当用户点击了截屏之后,就打开一个无边框的窗口,让它占据整个屏幕,背景就用抓得的当前屏幕的全图。然后再在上面画矩形,判断鼠标的位置和行为来变化光标和调整矩形的大小位置,就好像是在屏幕上选择一样。用户双击之后,通矩形选择域来确定最终截图。关于截屏遮罩效果,这个其实也简单,在不明白之前,想破脑袋也没个思路,明白之后是真简单。抓屏幕全图的时候,保存两份,一份加上遮罩效果,其实就是用只有alpha分量的颜色填充一遍,用这一份做为窗口背景。另一份的作用是截取图,当用户画完矩形后,从中截取出相应的矩形图,然后画在无边框窗口的矩形内,这样就成了高亮显示。 实现过程   1、截屏窗口MyCaptureForm 定义变量和初始化 1.​ private Rectangle currRect= Rectangle.Empty; //所画矩形    2.​ private int ControlBlockIndex = -1;         //控制点索引    3.​ private Point point;    4.​ private Point distance;                      //移动时鼠标与矩形的距离    5.​ private Cursor curRGB;      //彩色光标    6.​ private Image image = null; //所截屏幕图    7.​ private Image infoPanelPic;//提示面板    8.​ private string currPixel;   //当前像素的RGB信息    9.​ private bool isMouseDown=false;//鼠标左键是否按下    10.​    11.​ public Image Image    12.​ {    13.​     get { return this.image; }    14.​ }    15.​ ///     16.​ /// 遮罩层颜色    17.​ ///     18.​ private SolidBrush mask = new SolidBrush(Color.FromArgb(100,0,0,0));    19.​ ///     20.​ /// 原始屏幕图    21.​ ///     22.​ private Image ScreenImage;    23.​    24.​ public MyCaptureForm()    25.​ {    26.​     InitializeComponent();    27.​    28.​     //双缓冲绘制,避免闪烁    29.​     this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);    30.​     //无边框    31.​     this.FormBorderStyle = FormBorderStyle.None;    32.​     //不在任务栏中显示,用户按开始键或Ctrl+Tab时    33.​     this.ShowInTaskbar = false;    34.​     //置于顶层    35.​     this.TopMost = true;    36.​     //窗口布满整个屏幕    37.​     this.StartPosition = FormStartPosition.Manual;    38.​     this.Bounds = System.Windows.Forms.Screen.PrimaryScreen.Bounds;    39.​     //查看任务管理器时用    40.​     //this.Height -= 30;    41.​     //接受键盘输入,用于快捷键,如Esc    42.​     this.KeyPreview = true;    43.​    44.​     //保留原来    45.​     ScreenImage=GetScreenImage();    46.​     //将当前屏做为背景    47.​     Image BackScreen = new Bitmap(ScreenImage);    48.​     Graphics g= Graphics.FromImage(BackScreen);    49.​     //画遮罩    50.​     g.FillRectangle(this.mask, 0, 0, BackScreen.Width, BackScreen.Height);    51.​     g.Dispose();    52.​     this.BackgroundImage = BackScreen;    53.​     //彩色光标    54.​     curRGB = new Cursor(winStudy.Properties.Resources.Arrow_M.Handle);    55.​     Cursor = curRGB;    56.​     toolTip1.SetToolTip(this, "按住左键不放选择截图区域,可重复选择");    57.​ }   关于GetScreenImage(),查看。   2、事件处理 1.​ protected override void OnMouseDown(MouseEventArgs e)    2.​ {    3.​     if (e.Button == MouseButtons.Left)    4.​     {    5.​         //记录左键已按下    6.​         //记录鼠标位置    7.​         //设置光标    8.​         //第一次画/重新画    9.​     }    10.​     base.OnMouseDown(e);    11.​ }    12.​ //鼠标移动    13.​ protected override void OnMouseMove(MouseEventArgs e)    14.​ {    15.​     //取当前点的RGB值    16.​     if (鼠标按下)    17.​     {    18.​         //调整矩形大小和位置    19.​     }    20.​     else   21.​     {    22.​         //根据情况改变光标    23.​         //显示当前点的RGB值    24.​     }    25.​     base.OnMouseMove(e);    26.​ }    27.​ protected override void OnMouseUp(MouseEventArgs e)    28.​ {    29.​     //右键释放    30.​     if (e.Button == MouseButtons.Right)    31.​     {    32.​         //取消选择    33.​         //退出截屏    34.​     }    35.​     else if (e.Button == MouseButtons.Left)    36.​     {    37.​         //左键抬起    38.​         //完成选择并整理矩形,使其定位点为左上    39.​         //变化光标    40.​     }    41.​     base.OnMouseUp(e);    42.​ }    43.​ protected override void OnPaint(PaintEventArgs e)    44.​ {    45.​     //判空    46.​     //画突出显示的部分    47.​     //画矩形    48.​     //画控制点    49.​     //画信息面板    50.​     //顺序不能改变    51.​     base.OnPaint(e);    52.​ }    53.​ //双击截图    54.​ private void MyCaptureForm_DoubleClick(object sender, EventArgs e)    55.​ {    56.​     this.image = Bitmap;    57.​     this.DialogResult = DialogResult.OK;    58.​ }    59.​ // 快捷键 Esc取消选择/退出    60.​ protected override void OnKeyUp(KeyEventArgs e)    61.​ {    62.​     if (e.KeyData == Keys.Escape)    63.​     {    64.​         ExitForm(false);    65.​     }    66.​     base.OnKeyUp(e);    67.​ }    68.​ // 右键菜单    69.​ //保存为文件    70.​ private void mitemSaveFile_Click(object sender, EventArgs e)    71.​ {        }    72.​ //退出截屏    73.​ private void mitemCancel_Click(object sender, EventArgs e)    74.​ {    75.​     this.DialogResult = DialogResult.Cancel;    76.​ }   参考资料:   LanMsg C#仿QQ截屏 C#抓悬浮窗 C# 彩色光标嵌入资源文件 csharpwin截屏   效果图: 关于csharpwin截屏的更多介绍。 开发环境:VS2005
/
本文档为【C# 实用截屏】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索