Parser un DC/DIB

cs_Manson Messages postés 137 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 30 septembre 2004 - 15 sept. 2003 à 10:19
cs_Manson Messages postés 137 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 30 septembre 2004 - 16 sept. 2003 à 08:49
Salut a tous,

voila je voudrais recuperer une capture d'ecran (ca j'ai reussi).
Ensuite je voudrais l'afficher sur le fond de ma fenetre, mais pas d'un coups, mais pixel par pixel.

Voila mon code, il m'affiche que du noir :

void Capture_Screen(HDC hdest)
{
HDC hDC;
SIZE size;
BITMAPINFO myBIT;
HBITMAP myBitmap;
UINT *pixel;
int x;
int y;

hDC = GetDC(NULL);
size.cx = GetSystemMetrics(SM_CXSCREEN);
size.cy = GetSystemMetrics(SM_CYSCREEN);
memset(&myBIT,0,sizeof(myBIT));
myBIT.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
myBIT.bmiHeader.biWidth=size.cx;
myBIT.bmiHeader.biHeight=size.cy;
myBIT.bmiHeader.biPlanes=1;
myBIT.bmiHeader.biBitCount=8;
myBitmap = CreateDIBSection(hDC, &myBIT, DIB_PAL_COLORS, (void **)&pixel, NULL, 0);
if (myBitmap)
{
for (y = 1; y < size.cy; y++)
for (x = 1; x < size.cx; x++)
SetPixel(hdest, x, y, COLORREF2RGB(pixel[x*y]));
}
else
MessageBox(NULL, "Can't create DIB Section", "error", MB_OK);
DeleteObject(myBitmap);
DeleteDC(hDC);
ReleaseDC(NULL, hDC);
}

Si quelqu'un a une idee .... d'avance merci.

Arno

4 réponses

garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
15 sept. 2003 à 11:12
Si tu utilises DIB_PAL_COLORS pourquoi tu utilises du RGB après ?

Tu as essayé en mettant DIB_RGB_COLORS ?
0
cs_Manson Messages postés 137 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 30 septembre 2004
15 sept. 2003 à 14:27
en fait j'ai reussi a chopper les pixels en fesant directement un GetPixel sur le hdc.
Mais maintenant je voudrais ecrire ces pixels dans un DC differents, j'ai donc fait un :

HDC hdc_buff;

hdc_buff = CreateCompatibleDC(NULL);
et des SetPixel(hdc_buff, x, y, COULEUR);

Ensuite pour afficher :

BitBlt(hdc_main, 0, 0, size.cx, size.cy, hdc_buff, 0, 0, SRCCOPY);

mais voila rien, rien ne s'affiche dans ce DC.

Quelqu'un a une idee ?

Arno
0
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
16 sept. 2003 à 07:39
J'mexcuse de demander pardon...mais là je ne te suis plus!
Je croyais que tu ne voulais pas utiliser SRCCOPY mais faire une copie pixel par pixel...
Si c'est pour faire du BitBlt tu n'as pas besoin de t'embêter avec un buffer!!!
0
cs_Manson Messages postés 137 Date d'inscription lundi 17 décembre 2001 Statut Membre Dernière intervention 30 septembre 2004
16 sept. 2003 à 08:49
Salut,

nan en fait, mon but etait d'arriver a chopper les pixels de n'importe kel moyen pour travailler dessus et les injecter dans un nouveau buffer. Traitement d'image un peu basique ...

voila, j'espere que maintenant tu comprend mieux.

Rno
0
Rejoignez-nous