ROTATION BITMAP

kisscool19812002 Messages postés 3 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 21 septembre 2004 - 21 sept. 2004 à 13:40
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 1 oct. 2004 à 23:23
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/23921-rotation-bitmap

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
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és 293 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 10 avril 2015 2
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és 293 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 10 avril 2015 2
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és 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
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és 293 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 10 avril 2015 2
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és 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
22 sept. 2004 à 00:23
kisscool19812002 Messages postés 3 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 21 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
Rejoignez-nous