C#截取屏幕↑ 选择自 AppleDotnet 的 Blog

 

今天无聊翻代码,翻出来一个以前写的C#截屏的函数...拿出来和大家共享一下. 这段代码是参照网上一段截屏的C++代码改写的.只不过把API都声明了一下而已. 声明的各API也附后.以供参照.如有问题欢迎指出.(Appledotnet@hotmail.com)

 

 

///

/// 截取部分屏幕 /// /// 左上角 /// 右下角 /// 是否全屏幕 /// 返回值Bitmap public static Bitmap GetPartScreen(Point P1,Point P2,bool Full) {     IntPtr hscrdc,hmemdc;     IntPtr hbitmap,holdbitmap;     int nx,ny,nx2,ny2;     nx=ny=nx2=ny2=0;     int nwidth, nheight;     int xscrn, yscrn;     hscrdc = CreateDC("DISPLAY", null, null, 0);//创建DC句柄     hmemdc = CreateCompatibleDC(hscrdc);//创建一个内存DC     xscrn = GetDeviceCaps(hscrdc, GetDeviceCapsIndex.HORZRES);//获取屏幕宽度     yscrn = GetDeviceCaps(hscrdc, GetDeviceCapsIndex.VERTRES);//获取屏幕高度     if(Full)//如果是截取整个屏幕     {         nx = 0;         ny = 0;         nx2 = xscrn;         ny2 = yscrn;     }     else     {         nx = P1.X;         ny = P1.Y;         nx2 =P2.X;         ny2 =P2.Y;         //检查数值合法性         if(nx<0)nx = 0;         if(ny<0)ny = 0;         if(nx2>xscrn)nx2 = xscrn;         if(ny2>yscrn)ny2 = yscrn;     }     nwidth = nx2 - nx;//截取范围的宽度     nheight = ny2 - ny;//截取范围的高度     hbitmap = CreateCompatibleBitmap(hscrdc, nwidth, nheight);//从内存DC复制到hbitmap句柄     holdbitmap = SelectObject(hmemdc, hbitmap);     BitBlt(hmemdc, 0, 0, nwidth, nheight,hscrdc, nx, ny,(UInt32)0xcc0020);     hbitmap = SelectObject(hmemdc, holdbitmap);     DeleteDC(hscrdc);//删除用过的对象     DeleteDC(hmemdc);//删除用过的对象     return Bitmap.FromHbitmap(hbitmap);//用Bitmap.FromHbitmap从hbitmap返回Bitmap }

 

 

 

所用到的API声明:

[DllImport("gdi32.dll")] public static extern IntPtr CreateDC(  string lpszDriver,        // driver name  string lpszDevice,        // device name  string lpszOutput,        // not used; should be NULL  Int64 lpInitData  // optional printer data  );   [DllImport("gdi32.dll")] public static extern IntPtr CreateCompatibleDC(  IntPtr hdc // handle to DC  );   [DllImport("gdi32.dll")] public static extern int GetDeviceCaps(  IntPtr hdc,     // handle to DC  GetDeviceCapsIndex nIndex   // index of capability );

[DllImport("gdi32.dll")] public static extern IntPtr CreateCompatibleBitmap(  IntPtr hdc,        // handle to DC  int nWidth,     // width of bitmap, in pixels  int nHeight     // height of bitmap, in pixels  );

[DllImport("gdi32.dll")] public static extern IntPtr SelectObject(  IntPtr hdc,          // handle to DC  IntPtr hgdiobj   // handle to object  );

[DllImport("gdi32.dll")] public static extern int BitBlt(  IntPtr hdcDest, // handle to destination DC  int nXDest,  // x-coord of destination upper-left corner  int nYDest,  // y-coord of destination upper-left corner  int nWidth,  // width of destination rectangle  int nHeight, // height of destination rectangle  IntPtr hdcSrc,  // handle to source DC  int nXSrc,   // x-coordinate of source upper-left corner  int nYSrc,   // y-coordinate of source upper-left corner  UInt32 dwRop  // raster operation code  );

[DllImport("gdi32.dll")] public static extern int DeleteDC(  IntPtr hdc          // handle to DC  );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值