1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
{
int i, j; // Bcl
int R, G, B; // Recupère des infos
HDC hDC_tmp; // Pour récupérer les pixels
LPBYTE lpBits = new BYTE[4*320*240]; // Idem
HWND hwnd=hWnd_WC; // Fenetre de la capture
HDC memdc, hdc; // DC
void *pBits; // Tbl de pixel
HBITMAP hbmp; // Image
BITMAPINFO bmpinfo; // info sur l'image
HGDIOBJ hret; // Pour récupérer l'image
hdc = hDC_WC; // Va avec le hWnd
// C'est marqué
if(!(memdc = CreateCompatibleDC(hdc)))
return;
// Donne les infos sur le bitmap
bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpinfo.bmiHeader.biWidth = 320;
bmpinfo.bmiHeader.biHeight = 240;
bmpinfo.bmiHeader.biPlanes = 1;
bmpinfo.bmiHeader.biBitCount = 32;
bmpinfo.bmiHeader.biCompression = BI_RGB;
bmpinfo.bmiHeader.biSizeImage = 0;
bmpinfo.bmiHeader.biXPelsPerMeter = 0;
bmpinfo.bmiHeader.biYPelsPerMeter = 0;
bmpinfo.bmiHeader.biClrUsed = 0;
bmpinfo.bmiHeader.biClrImportant = 0;
// Création du bitmap
hbmp = CreateDIBSection(hdc, &bmpinfo, DIB_PAL_COLORS, &pBits, NULL, 0);
// En cas d'erreur
if(!hbmp)
{
// Fait le ménage
DeleteObject(hbmp);
DeleteDC(memdc);
free(pBits);
return;
}
// Sélectionne le mendc avec l'image
hret = SelectObject(memdc, hbmp);
if(!hret || (hret == HGDI_ERROR))
{
// Fait le ménage
DeleteObject(hbmp);
DeleteDC(memdc);
free(pBits);
return;
}
// Colle l'image
if(!BitBlt(memdc, 0, 0, 320, 240, hdc, 0, 0, SRCCOPY))
{
// Fait le ménage
DeleteObject(hbmp);
DeleteDC(memdc);
free(pBits);
return;
}
// Récupère le DC
hDC_tmp=GetDC(NULL);
// Récupère les pixels
GetDIBits(hDC_tmp, hbmp, 0, 240, lpBits, &bmpinfo, DIB_RGB_COLORS);
// Fait le ménage
ReleaseDC(NULL, hDC_tmp);
// Parcoure les pixels et les stocke dans un tbl
for(i=0; i<240; i++)
for(j=0; j<320; j++)
{
// Récupère chaque coef du RGB
TblImage[ID_Bmp].points[i][j].R = R = lpBits[4*320*(239-i)+4*j+2];
TblImage[ID_Bmp].points[i][j].G = G = lpBits[4*320*(239-i)+4*j+1];
TblImage[ID_Bmp].points[i][j].B = B = lpBits[4*320*(239-i)+4*j];
// Calcul la couleur
TblImage[ID_Bmp].points[i][j].Couleur = R + 256*G + 256*256*B;
}
// Fait le ménage
free(lpBits);
DeleteObject(hbmp);
DeleteDC(memdc);
} |
Partager