Je suis en train de capturer une partie carrée de l'écran à l'aide GDI sous Windows 10. Voici comment j'ai essayé:BitBlt capture seulement écran partiel
//Get screen DC
desktop = GetDC(NULL);
//Create a compatible bitmap of 32 x 32 px.
HDC hCaptureDC = CreateCompatibleDC(desktop);
HBITMAP captureBmp = CreateCompatibleBitmap(hCaptureDC, 32, 32);
SelectObject(hCaptureDC, captureBmp);
//loop:
BitBlt(hCaptureDC, 0, 0, 32, 32, desktop, sourceX, sourceY, SRCCOPY);
BitBlt(desktop, 0, 0, 32, 32, hCaptureDC, 0, 0, SRCCOPY);
donc je capture un rectangle 32x32 px à (sourceX, sourceY)
dans le bitmap et dessinez-le sur l'écran (coin supérieur gauche).
Cependant, cela se traduit principalement par des carrés noirs. Seules les choses qui ont été dessinées par GDI avant d'être capturé. Je suis tout à fait sûr que le premier BitBlt
est le problème. Si je spécifie WHITENESS
comme dernier paramètre, j'obtiens un carré blanc, ce qui est ce que j'attendrais. Donc, la capture de l'écran à l'image bitmap semble être problématique.
Si je copie directement d'un écran à l'aide
BitBlt(desktop, 0, 0, 32, 32, desktop, sourceX, sourceY, SRCCOPY);
, tout fonctionne comme prévu. J'ai également essayé le drapeau CAPTUREBLT
.
Comment puis-je capturer toute la région dans le bitmap?