Pb pour lire un tbl

Stepharcher Messages postés 117 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 8 septembre 2008 - 16 juin 2004 à 21:21
Stepharcher Messages postés 117 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 8 septembre 2008 - 18 juin 2004 à 11:14
Bonjours à tous !

Je vous explique mon problème : j'utilise la fonction GetDIBits qui me donne un tableau de pixel.Jj'ai 2 soucis : le tableau est déclaré du type void* et je ne sais pas comment exploité ce type. Deuxième problème, je ne connais pas le format d'un pixel.

Si vous pouviez m'aider s'il vous plait

Merci de votre attention

>:) Stéph >:)

2 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
17 juin 2004 à 12:36
void* permet de passer un pointeur sur ce que tu veux

utilisation deGetDIBits pour obtenir les pixels d'un HBITMAP hBmp :

// tout d'abord on récupère des informations sur la taille du bitmap
BITMAP bmpInfo;
GetObject(hBitmap, sizeof(BITMAP), &bmpInfo);

// allocation mémoire. On va récupérer le bitmap en 32 bits/pixel pour simplifier
// comme cela, on sera sur que chaque ligne du bitmap sera codé sur un nombre
// d'octets multiple de 4. Si le bitmap n'est pas bottom-up (cas le plus fréquent)
// mais top-down, bmpInfo.bmHeight est négatif.
LPBYTE lpBits = new BYTE[4*bmpInfo.bmWidth*bmpInfo.bmHeight];

// initialisation structure BITMAPINFO
BITMAPINFO bi;
memset(&bi, 0, sizeof(BITMAPINFO));
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bi.bmiHeader.biWidth = bmpInfo.bmWidth;
bi.bmiHeader.biHeight = bmpInfo.bmHeight;
bi.bmiHeader.biBitCount= 32;
bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biCompression= BI_RGB;

// récupération pixels
HDC hdc = GetDC(NULL);
GetDIBits(hdc, hBitmap, 0, bmpInfo.bmHeight, lpBits, &bi, DIB_RGB_COLORS);
ReleaseDC(NULL, hdc);

ce code récupère donc les pixels en 32 bits par pixels (4 octets). les pixels sont stockés par ligne, de bas en haut et de gauche à droite
couleurs du pixel (x,y) :
R = lpPixel[4*bmpInfo.bmWidth*y+4*x]
G = lpPixel[4*bmpInfo.bmWidth*y+4*x+1]
B = lpPixel[4*bmpInfo.bmWidth*y+4*x+2]

tu pourrais récupér en 24 bits par pixels (3 octets) mais dans ce ca c'est plus compliqué la taille d'une ligne destockage doit être multiple de 4et il faut déterminer cette taille à partir de la largeur de l'image. en 4 octets, cette larceur est toujurs multiple de 4.
0
Stepharcher Messages postés 117 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 8 septembre 2008
18 juin 2004 à 11:14
Merci beacoup pour ton aide. J'ai publié une source qui utilisent ton principe... c'est vrai que le programme est plus rapide !

>:) Stéph >:)
0