欢迎光临
我们一直在努力

C#截取屏幕↑-.NET教程,C#语言

建站超值云服务器,限时71元/月

今天无聊翻代码,翻出来一个以前写的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

);

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » C#截取屏幕↑-.NET教程,C#语言
分享到: 更多 (0)

相关推荐

  • 暂无文章