코드의 문제는 사용중인 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;
}
내가 윈도우 폼과 (Imaging.CreateBitmapSourceFromHBitmap
와) WPF에서 그것을 시도, 그것은 (Firefox에서 SO 페이지) 같은 스크린 샷을 위해 두 경우 모두에서 잘 작동합니다.
HTH,
당신은 몇 가지 코드가 당신이 당신의 코드를 게시 할 수 – ChrisF
게시해야합니다? –
http://pastebin.com/m41620c37 - 지금은 다소 혼란 스럽습니다. 하드 코딩 된 hwnd는 내 파이어 폭스 창입니다. – directedition