捕获图像

【勇芳软件工作室】汉化HomePreviousNext

您可以使用位图捕获图像,并且可以将捕获的图像存储在内存中,将其显示在应用程序窗口中的不同位置,或将其显示在另一个窗口中。

在某些情况下,您可能希望应用程序捕获图像并暂时存储。例如,当您缩放或缩放在绘图应用程序中创建的图片时,应用程序必须临时保存图像的普通视图并显示缩放视图。稍后,当用户选择普通视图时,应用程序必须使用其临时保存的普通视图的副本来替换缩放图像。

要临时存储图像,您的应用程序必须调用CreateCompatibleDC创建与当前窗口DC兼容的DC。创建兼容的DC后,通过调用CreateCompatibleBitmap函数创建一个具有适当维度的位图,然后通过调用SelectObject功能将其选择到此设备上下文中。

在创建兼容设备上下文并选择适当的位图后,您可以捕获图像。Win32 API提供了BitBlt捕获图像的功能。该函数执行位块传输__,即将数据从源位图复制到目标位图。因为它从位图复制数据,所以你会期望这个函数的两个参数是位图句柄;然而,这种情况并非如此。相反,BitBlt接收识别两个设备上下文的句柄,并将位图数据从选定到源DC中的位图复制到选定到目标DC中的位图。在这种情况下,目标DC是兼容的DC,所以当BitBlt完成传输时,图像已被存储在存储器中。要重新显示图像,请再次呼叫BitBlt,指定兼容DC作为源DC,将窗口(或打印机)DC指定为目标DC。

来自捕获整个桌面图像的应用程序的以下示例代码创建兼容的设备上下文和具有适当尺寸的位图,将位图选择到兼容的DC中,然后使用BitBlt功能复制图像。

/*

*为整个屏幕创建一个正常的DC和一个内存DC。该

*正常DC提供屏幕内容的“快照”。该

*内存DC保存关联的“快照”副本

*位图。

*/

hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL);

hdcCompatible = CreateCompatibleDC(hdcScreen);

/ *为hdcScreen创建一个兼容的位图。*/

hbmScreen = CreateCompatibleBitmap(hdcScreen,

GetDeviceCaps(hdcScreen,HORZRES),

GetDeviceCaps(hdcScreen, VERTRES));

if (hbmScreen == 0)

errhandler("hbmScreen", hwnd);

/ *选择位图到兼容DC。*/

if(!SelectObject(hdcCompatible,hbmScreen))

errhandler("Compatible Bitmap Selection", hwnd);

/ *隐藏应用程序窗口。*/

ShowWindow(hwnd, SW_HIDE);

/*

*将整个显示器的颜色数据复制到

*位图被选入兼容DC。

*/

if(!BitBlt(hdcCompatible,

0,0,

bmp.bmWidth,bmp.bmHeight,

hdcScreen,

0,0,

SRCCOPY))

errhandler("Screen to Compat Blt Failed", hwnd);

/ *重绘应用程序窗口。*/

ShowWindow(hwnd, SW_SHOW);