画面キャプチャ/記録アプリケーションを作成しようとしています。画面をキャプチャして保存するコードの一部を次に示します。
width = GetSystemMetrics(SM_CXMAXTRACK)+8;
height = GetSystemMetrics(SM_CYMAXTRACK)-8;
hwindowDC=GetDC(GetDesktopWindow());
hwindowCompatibleDC=CreateCompatibleDC(hwindowDC);
SetStretchBltMode(hwindowCompatibleDC,COLORONCOLOR);
// create a bitmap
hbwindow = CreateCompatibleBitmap( hwindowDC, width, height);
cout << " handle to newly created bitmap: " << hbwindow << "\n";
SelectObject(hwindowCompatibleDC, hbwindow); //copy from hwindowCompatibleDC to hbwindow
StretchBlt( hwindowCompatibleDC, 0,0, width, height, hwindowDC, 0, 0,width,height, SRCCOPY); //change SRCCOPY to NOTSRCCOPY for wacky colors !
src.create(height,width,CV_8UC4);
src.empty();
GetDIBits(hwindowCompatibleDC,hbwindow,0,height,src.data,(BITMAPINFO *)&bi,DIB_RGB_COLORS);
DeleteDC(hwindowCompatibleDC);
DeleteObject(hbwindow);
千回ほど繰り返した後、私の cout ステートメントは、新しく作成されたハンドルを 000000000000000 aka として表示します。ヌル。私のアプリはその時点まで正常に動作します。
作成した DC とビットマップを毎回削除しているので、メモリ リークは発生しません。タスク マネージャーも、メモリ リークがないことを確認します。それで、何が起こっているのですか?
これを手伝ってくれる人に感謝します。