用制作C#作屏幕捕获程序

用制作C#作屏幕捕获程序,第1张

用制作C#作屏幕捕获程序,第2张

我们已经了解了Visual Basic或Delphi等语言是如何捕捉屏幕图像的。那么对于C #,这个功能是如何实现的呢?本文将讨论这个问题。

一、编程、开发和运行环境:

(1).Microsoft Windows 2000 Server Edition

(2)..net Framework SDK Beta 2

二。程序设计的关键步骤和具体实施方法:

(1).首先,创建一个与当前屏幕大小相同的位图对象:

要实现这个操作,首先要获取当前显示器的DC,然后基于这个DC创建一个图形对象,再从这个图形对象生成这个位图对象。生成的位图对象与当前屏幕尺寸一致。要获得显示器的DC,不可能使用。Net,这需要调用一个Windows API函数。我们知道Windows的所有API都封装在“内核”、“用户”和“GDI”三个库中,其中“内核”命名为“KERNEL32”。DLL”。类库“用户”被称为“用户32”。Win32中的。它主要管理所有用户界面。例如窗口、菜单、对话框、图标等。“GDI”(图像设备接口),它在Win32中的库名是“GDI32.dll”。为了获得显示的DC,这个类库中封装了名为- CreateDC()的API函数。在C #中声明windows的API函数时,要用到“System。中的“Runtime.InteropServices”。需要. Net FrameWork SDK。这个name 空提供了一系列访问COM对象和调用本地API函数的类。下面是用C #来声明这个函数:

【系统。runtime . interop services . dllimportattribute(" GDI 32 . dll ")]
private static extern int ptr CreateDC(
string lpsz driver,//drive name
string lpsz device,//device name
string lpsz output,//无用,可以设置bit " NULL "
IntPtr lpInitData//any printer data
);
一旦在C #中声明了这个API函数,您就可以创建一个与显示大小相同的位图对象。具体实现语句如下:
intptrdc 1 = createdc(" display ",null,null,(intptr)null);
//创建显示的DC
Graphics G1 = Graphics . from hdc(DC1);
//通过指定设备的句柄创建新的图形对象
my image = new bitmap(screen . primary screen . bounds . width,screen . primary screen . bounds . height,G1);
//创建与屏幕大小相同的位图对象。

(2).创建一个图形对象,如下图所示:

这个功能可以通过下面的代码来实现:

图形g2 =图形。FromImage(我的图像);

(3).获取当前屏幕和位图的句柄:

获取这两个对象的句柄,以便在下一步中捕获当前屏幕图像。程序中具体的捕获方法是将当前屏幕捕获到创建的位图对象中。具体实现代码如下:

//获取屏幕的句柄
IntPtr dc3 = g1。get hdc();
//获取位图的句柄
IntPtr dc2 = g2。get hdc();
//将当前屏幕捕获到位图对象中。

(4).捕获当前屏幕:

我们通过将当前屏幕保存到创建的位图对象中来实现,具体实现过程是通过- Bitblt,一个Windows的API函数。我想大部分程序员都很熟悉这个API函数,因为Windows映像编程中很多地方都会用到这个函数。这个API函数封装在“GDI32.dll”中,就像上面描述的API函数一样。下面是这个函数在C #中的声明:

【系统。runtime . interop services . dllimportattribute(" GDI 32 . dll ")]
private static extern bool BitBlt(
int ptr hdc dest,//目标设备的句柄
int nXDest,//目标对象左上角的x坐标
int nYDest,//目标对象左上角的x坐标
int nWidth,//目标对象矩形的宽度
int nhe //源设备的句柄
int nXSrc,//源对象左上角的x坐标
源对象左上角的x坐标
系统。 Int32 dwRop //光栅的操作值[
知道这个语句可以保存当前屏幕,如下:
BitBLT (DC2,0,0,screen。主屏幕。边界。宽度,屏幕。主屏幕。DC3,0,0,13369376);

(5).将当前屏幕保存到硬盘并释放手柄:

g1。release hdc(dc3);
//释放屏幕句柄
g2。release hdc(dc2);
//释放位图句柄
myimage . save(" C:\ \ myjpeg . jpg ",ImageFormat。JPEG);

我们可以根据自己的要求将当前屏幕保存为不同的文件格式。本文介绍的程序保存为“jpg”文件。您可以通过修改“save”方法的第二个参数来更改保存到硬盘的文件类型。例如,如果第二个参数是“图像格式”。Gif”,那么你保存到硬盘的文件就是一个“GIF”文件。对于其他文件格式,请参考。Net框架SDK,里面有详细的介绍。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 用制作C#作屏幕捕获程序

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情