2009-08-14 10 views
5

Robię zrzuty ekranu przeglądarki IE przy użyciu programu PrintWindow. Problem polega na tym, że czasami uzyskuję obrazy z czarnymi obszarami. Może to być cała zawartość html, która jest czarna, niektóre razy tylko niektóre obszary są czarne.Czarne zdjęcia podczas robienia zrzutów ekranu za pomocą programu PrintWindow

Treść IE NIE zmienia się pomiędzy robieniem zdjęć.

Co jest dziwne, że na niektórych komputerach uzyskuję czarne obrazy bardzo późno, na niektórych nigdy ich nie dostaję.

Testowałem z Fx i miałem te same czarne obrazy.

HBITMAP ShootWindow(HWND hWnd) 
{ 
    RECT rect = {0}; 

    GetWindowRect(hWnd, & rect); 

    HDC hDC = GetDC(hWnd); 
    if(hDC == NULL) 
     throw "GetDC failed."; 

    HDC hTargetDC = CreateCompatibleDC(hDC); 
    if(hTargetDC == NULL) 
     throw "CreateCompatibleDC failed."; 

    HBITMAP hBitmap = CreateCompatibleBitmap(hDC, rect.right - rect.left, rect.bottom - rect.top); 
    if(hBitmap == NULL) 
     throw "CreateCompatibleBitmap failed."; 

    if(!SelectObject(hTargetDC, hBitmap)) 
     throw "SelectObject failed."; 

    if(!PrintWindow(hWnd, hTargetDC, 0)) 
     throw "PrintWindow failed."; 

    ReleaseDC(hWnd, hDC); 
    ReleaseDC(hWnd, hTargetDC); 

    return hBitmap; 
} 

Znalazłem kilka linków, ale oni nie dają odpowiedź:

http://www.vbforums.com/showthread.php?t=555250 http://www.codeguru.com/forum/archive/index.php/t-357211.html http://social.msdn.microsoft.com/forums/en-US/winforms/thread/3e3decd8-ced1-4f17-a745-466e5aa91391/

+0

Czy na stronie występuje korelacja między czarnymi obszarami a SWF/Flash? – Mark

+0

Nie. Mam czarne dziury za pomocą prostego www.google.com. – alex2k8

+0

Widzę problem na Windows 2008. Podczas XP, Vista i Windows 7 wydaje się być w porządku. – alex2k8

Odpowiedz

2

to wydaje się być powszechne podczas robienia zrzutów ekranu z aplikacji, które są przy użyciu GPU. BitBlt może skutecznie kopiować piksele, w których nie działa program PrintWindow.

WINDOWINFO wi; 
GetWindowInfo(hWnd, &wi); 

BitBlt(hdc, 0, 0, rect.right - rect.left, rect.bottom - rect.top, hDC, wi.rcClient.left, wi.rcClient.top, SRCCOPY); 
Powiązane problemy