C#实现截图工具小项目_第1页
C#实现截图工具小项目_第2页
C#实现截图工具小项目_第3页
C#实现截图工具小项目_第4页
C#实现截图工具小项目_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第C#实现截图工具小项目//窗体关闭-取消热键

privatevoidForm1_FormClosing(objectsender,FormClosingEventArgse){

HotKey.UnregisterHotKey(Handle,100);

//快捷键按下执行的事件

privatevoidGlobalKeyProcess(){

this.WindowState=FormWindowState.Minimized;

Thread.Sleep(200);

button1.PerformClick();

//重写。监视系统消息,调用对应方法

protectedoverridevoidWndProc(refMessagem){

constintWM_HOTKEY=0x0312;

//如果m.Msg的值为0x0312(我也不知道为什么是0x0312)那么表示用户按下了热键

switch(m.Msg){

caseWM_HOTKEY:

if(m.WParam.ToString().Equals("100")){

GlobalKeyProcess();

//todo其它热键

break;

//将系统消息传递自父类的WndProc

base.WndProc(refm);

}

截图窗体-核心Cutter.cs

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

usingSystem.Windows.Forms;

namespacetest{

publicpartialclassCutter:Form{

BitmapscreenBtmp=null;//电脑屏幕的截图

publicCutter(Bitmapbtm){

InitializeComponent();

screenBtmp=btm;

//鼠标右键退出

privatevoidCutter_MouseClick(objectsender,MouseEventArgse){

if(e.Button==MouseButtons.Right){

this.DialogResult=DialogResult.OK;

this.Close();

boolCatchStart=false;//自由截图开始

PointdownPoint;//初始点

//鼠标左键按下-开始自由截图

privatevoidCutter_MouseDown(objectsender,MouseEventArgse){

if(e.Button==MouseButtons.Left){

if(!CatchStart){

CatchStart=true;

downPoint=newPoint(e.X,e.Y);//初始点

RectanglecatchRec;//存放截取范围

//鼠标移动-绘制自由截图路径

privatevoidCutter_MouseMove(objectsender,MouseEventArgse){//路径绘制,核心

if(CatchStart){

//二次缓冲

//不是直接在控件的背景画板上进行绘制鼠标移动路径,那样会造成绘制很多路径,因为前面绘制的路径还在

//而是在内存中每移动一次鼠标就创建一张和屏幕截图一样的新BImtap,在这个Bitmap中绘制鼠标移动路径

//然后在窗体背景画板上,绘制这个新的Bitmap,这样就不会造成绘制很多路径,因为每次都绘制了全新的Bitmao

//但是这样做的话,因为鼠标移动的次数是大量的,所以在内存中会创建大量的Bitmap会造成内存消耗严重,所以每次移动绘制完后,

//需要释放Dispose()画板,画笔,Bitmap资源。

BitmapcopyBtmp=(Bitmap)screenBtmp.Clone();//创建新的,在其上绘制路径

//左上角

PointfirstP=newPoint(downPoint.X,downPoint.Y);

//新建画板,画笔

Graphicsg=Graphics.FromImage(copyBtmp);

Penp=newPen(Color.Red,1);

//计算路径范围

intwidth=Math.Abs(e.X-downPoint.X);

intheight=Math.Abs(e.Y-downPoint.Y);

if(e.XdownPoint.X){

firstP.X=e.X;

if(e.YdownPoint.Y){

firstP.Y=e.Y;

//绘制路径

catchRec=newRectangle(firstP,newSize(width,height));

//将路径绘制在新的BItmap上,之后要释放

g.DrawRectangle(p,catchRec);

g.Dispose();

p.Dispose();

//窗体背景画板

Graphicsgf=this.CreateGraphics();

//将新图绘制在窗体的画板上--自由截图-路径绘制处,其实还是一张和屏幕同样大小的图片,只不过上面有红色的选择路径

gf.DrawImage(copyBtmp,newPoint(0,0));

gf.Dispose();

//释放内存Bimtap

copyBtmp.Dispose();

boolcatchFinished=false;//自由截图结束标志

//鼠标左键弹起-结束自由截图

privatevoidCutter_MouseUp(objectsender,MouseEventArgse){

if(e.Button==MouseButtons.Left){

if(CatchStart){

CatchStart=false;

catchFinished=true;

//鼠标左键双击,保存自由截取的图片

privatevoidCutter_MouseDoubleClick(objectsender,MouseEventArgse){

if((e.Button==MouseButtons.Left)catchFinished){

//创建用户截取的范围大小的空图

BitmapcatchBtmp=newBitmap(catchRec.Width,catchRec.Height);

Graphicsg=Graphics.FromImage(catchBtmp);

//在原始的屏幕截图ScreenBitmap上截取用户选择范围大小的区域绘制到上面的空图

//绘制完后,这个空图就是我们想要的截取的图片

//参数1原图

//参数2在空图上绘制的范围区域

//参数3原图的截取范围

//参数4度量单位

g.DrawImage(screenBtmp,newRectangle(0,0,catchRec.Width,catchRec.Height),catchRec,GraphicsUnit.Pixel);

//将自由截取的图片保存到剪切板中

Clipboard.Clear();

Clipboard.SetImage(catchBtmp);

g.Dispose();

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论