Stepharcher
Messages postés117Date d'inscriptionsamedi 12 avril 2003StatutMembreDernière intervention 8 septembre 2008
-
16 juin 2004 à 21:21
Stepharcher
Messages postés117Date d'inscriptionsamedi 12 avril 2003StatutMembreDerniè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.
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 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];
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.