Проблема в вашем коде может быть связана с Win32 API, который вы используете (CreateCompatibleDC
, SelectObject
, CreateBitmap
...). Я попытался с более простым кодом, используя только GetDC
и BitBlt
, и он прекрасно работает для меня. Вот мой код:
public static Bitmap Capture(IntPtr hwnd)
{
IntPtr hDC = GetDC(hwnd);
if (hDC != IntPtr.Zero)
{
Rectangle rect = GetWindowRectangle(hwnd);
Bitmap bmp = new Bitmap(rect.Width, rect.Height);
using (Graphics destGraphics = Graphics.FromImage(bmp))
{
BitBlt(
destGraphics.GetHdc(),
0,
0,
rect.Width,
rect.Height,
hDC,
0,
0,
TernaryRasterOperations.SRCCOPY);
}
return bmp;
}
return null;
}
Я пробовал это в Windows Forms и WPF (с Imaging.CreateBitmapSourceFromHBitmap
), в обоих случаях он отлично работает для одного и того же скриншота (SO страница в Firefox).
НТН,