4

C# でBitBltを使用してキャプチャされたスクリーンショットは、 Windows 10で黒い画像になりました。これを解決するのを手伝ってください。

スクリーンショットは、Chrome (ハードウェア アクセラレーション モードがオンの場合) および IE/Edge ウィンドウの黒いイメージです。

ハードウェア アクセラレーション モードがオンの場合、Edge、Windows 10 の IE ブラウザー ウィンドウ、および Chrome ブラウザー ウィンドウでのみ、出力画像が黒くなります。透明なウィンドウを含む他のすべてのウィンドウとは別に、スクリーンショットは良好です。

コードは次のとおりです。

const int Srccopy = 0x00CC0020;
var windowRect = new Rect();

GetWindowRect(handle, ref windowRect);
int width = windowRect.right - windowRect.left;
int height = windowRect.bottom - windowRect.top;

// get te hDC of the target window
IntPtr hdcSrc = GetWindowDC(handle);

// create a device context we can copy to
IntPtr hdcDest = CreateCompatibleDC(hdcSrc);

// create a bitmap we can copy it to,
IntPtr hBitmap = CreateCompatibleBitmap(hdcSrc, width, height);
// select the bitmap object
IntPtr hOld = SelectObject(hdcDest, hBitmap);

// bitblt over
BitBlt(hdcDest, 0, 0, width, height, hdcSrc, 0, 0, Srccopy);
// restore selection
SelectObject(hdcDest, hOld);
// clean up
DeleteDC(hdcDest);
ReleaseDC(handle, hdcSrc);

Image img = Image.FromHbitmap(hBitmap);
// free up the Bitmap object
DeleteObject(hBitmap);
4

1 に答える 1