ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 1 oct. 2004 à 23:23
dans le code, je ne fait que recopier des pixels => j'utilise un DWORD (32 bits) pour faire les mamips, d'où le cast en LPDWORD et l'absence du facteur 4
à la fin, il faut soit recréer un bitmap soit affecter les données avec SetDIBits
cs_Adeon
Messages postés293Date d'inscriptionjeudi 21 août 2003StatutMembreDernière intervention10 avril 20152 1 oct. 2004 à 19:55
haaa ok c'est ds la variable LPVOID que retourne la fonction !
je vai essayer de mediter la dessus !
cs_Adeon
Messages postés293Date d'inscriptionjeudi 21 août 2003StatutMembreDernière intervention10 avril 20152 1 oct. 2004 à 19:38
ok merci c'est sympa de t'occuper de moi.
ds ce cas tu appelles ton tableau array. mais ds ton prog, quel est le nom du tableau ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 1 oct. 2004 à 16:22
tout d'abord, il faut récupérer les données du bitmap, c'est à dire récuprer la suite d'octets composant l'image, celle-ci étant représenter par des pixels codés sur 1, 4, 8, 24 ou 32 bits.
Dans mon exemple, je récupère les données avec des pixels codés sur 32 bits (c'est plus simple à gérer). C'est la fonction GetBitmapData() qui s'en charge
Ensuite, il faut savoir qu'un bitmap est stocker ligne par ligne en commançant par le bas (bitmap Bottum-Up). Il existe la convention inverse (Top-Down), mais c'est plus rare. sur chaque ligne, les pixels sont stockés de gauche à droite sur le nombre de bits demandés.
Le point important c'est que la taille d'une ligne en octets doit être multiple de 4 octets=32bits pour des raisons d'alignement de la mémoier (d'où le 32 bits par pixel pour simplifier).
donc on récupère un tableau d'octet de taille 4*Hauteur*Largeur :
BYTE array[4*hauteur, largeur].
les données du pixel (x,y) avec la convention habituelle x vers la droite et y vers le bas, sont stockées là:
array[((hauteur-y-1)*largeur+x)*4];
array[((hauteur-y-1)*largeur+x)*4+1];
array[((hauteur-y-1)*largeur+x)*4+2];
array[((hauteur-y-1)*largeur+x)*4+3];
le premier octet est la composante bleue
le deuxième la composante verte.
la troisième la composante rouge.
la quatrième est à 0.
cs_Adeon
Messages postés293Date d'inscriptionjeudi 21 août 2003StatutMembreDernière intervention10 avril 20152 30 sept. 2004 à 21:55
j'avoue que j'ai du mal a suivre ton code ( pourtant il est bien commente ! )
Tu pourrai me dire avec un ptit exemple comment modifier un HBITMAP en mettant ( par exemple ) un pixel rouge au coordone (5,5) de celui ci Avant qu'il soit afficher bien sure.
utiliser SetPixel() je sais faire !.
merci !
salut et bonne prog !
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 22 sept. 2004 à 00:23
kisscool19812002
Messages postés3Date d'inscriptionmercredi 19 novembre 2003StatutMembreDernière intervention21 septembre 2004 21 sept. 2004 à 13:40
comment accèder aux valeurs couleurs des pixels et les modifier ? comment enregistrer la bitmap ainsi construite dans un fichier bmp sur le dur ?? merci
1 oct. 2004 à 23:23
à la fin, il faut soit recréer un bitmap soit affecter les données avec SetDIBits
1 oct. 2004 à 19:55
je vai essayer de mediter la dessus !
1 oct. 2004 à 19:38
ds ce cas tu appelles ton tableau array. mais ds ton prog, quel est le nom du tableau ?
1 oct. 2004 à 16:22
Dans mon exemple, je récupère les données avec des pixels codés sur 32 bits (c'est plus simple à gérer). C'est la fonction GetBitmapData() qui s'en charge
Ensuite, il faut savoir qu'un bitmap est stocker ligne par ligne en commançant par le bas (bitmap Bottum-Up). Il existe la convention inverse (Top-Down), mais c'est plus rare. sur chaque ligne, les pixels sont stockés de gauche à droite sur le nombre de bits demandés.
Le point important c'est que la taille d'une ligne en octets doit être multiple de 4 octets=32bits pour des raisons d'alignement de la mémoier (d'où le 32 bits par pixel pour simplifier).
donc on récupère un tableau d'octet de taille 4*Hauteur*Largeur :
BYTE array[4*hauteur, largeur].
les données du pixel (x,y) avec la convention habituelle x vers la droite et y vers le bas, sont stockées là:
array[((hauteur-y-1)*largeur+x)*4];
array[((hauteur-y-1)*largeur+x)*4+1];
array[((hauteur-y-1)*largeur+x)*4+2];
array[((hauteur-y-1)*largeur+x)*4+3];
le premier octet est la composante bleue
le deuxième la composante verte.
la troisième la composante rouge.
la quatrième est à 0.
30 sept. 2004 à 21:55
Tu pourrai me dire avec un ptit exemple comment modifier un HBITMAP en mettant ( par exemple ) un pixel rouge au coordone (5,5) de celui ci Avant qu'il soit afficher bien sure.
utiliser SetPixel() je sais faire !.
merci !
salut et bonne prog !
22 sept. 2004 à 00:23
http://www.cppfrance.com/code.aspx?id=21052
21 sept. 2004 à 13:40