0

画面の 500x500 HBITMAP を 0x0 (左上) から取得し、ウィンドウに描画したいと考えています。これが私のコードです。SaveBitmap()HBITMAP とその作業中の Fine を保存します。

int scrnw = 500;
int scrnh = 500;

HDC shdc=GetWindowDC(NULL);
HWND win=WindowFromDC(shdc);

HDC cdc=CreateCompatibleDC(shdc);
HBITMAP temp=CreateCompatibleBitmap(shdc,scrnw,scrnh);
PAINTSTRUCT ps;

shdc=BeginPaint(win,&ps);
HBITMAP oldb=(HBITMAP)SelectObject(cdc,temp);
BitBlt(cdc,0,0,scrnw,scrnh,shdc,0,0,SRCCOPY);
SelectObject(cdc,oldb);
EndPaint(win,&ps);
char * buffer;
buffer=new char[scrnw*scrnh*4];
GetBitmapBits(temp,scrnw*scrnh*4,buffer);

SaveBitmap("C:\\scan.bmp", temp);

HDC hdc=GetWindowDC(hwnd);
HBITMAP scrn = CreateCompatibleBitmap(hdc,500,500);
SetBitmapBits(scrn,500*500*4,buffer);

問題は、キャプチャされた画像が Window.Where に描画されていないことです。

4

1 に答える 1

0

shdcを実行するときに画面を「忘れる」shdc=BeginPaint()ため、画像を取得する場所がありません。

そのままにしてshdc=GetWindowDC(NULL)、別の HDC を使用しhdcMyPaint=BeginPaint()ます。にブリットした後cdc、あなたの にもブリットしますhdcMyPaint。それはそれを行う必要があります。

于 2011-04-09T20:13:32.423 に答える