A voir également:
- Explication sur un code source
- Code asci - Guide
- Code puk bloqué - Guide
- Code telephone oublié - Guide
- Code activation windows 10 - Guide
- Comment créer un qr code - Guide
2 réponses
grou29
Messages postés
39
Date d'inscription
mardi 27 octobre 2009
Statut
Membre
Dernière intervention
19 mai 2010
9
2 déc. 2009 à 20:59
2 déc. 2009 à 20:59
C'est tout simple.
Le principe:
un pixel se décompose en 3 valeurs rouge, vert et bleu chacune codé sur un octet (valeur entre 0 et 255)
Souvent, ces trois valeur sont rassemblés dans une seule variable de 4 octets dont les bits 0 a 7 sont pour le rouge, de 8 à 15 pour le vert et 16 à 23 pour le rouge.
Le plus souvent on utilise les décalage pour faire ca comme ici;
long val =( (B<<8) + G) <<8 + R
(on prend le bleu, on décale de 8 octets vers la gauche, on ajoute le vert , on decale le tout de 8octets a gauche et on ajoute le rouge. (tu suis?)
ce qu'il faut savoir qu'un décalage d'un bit a gauche correspond a multiplié par 2 donc un décalage de 8 bits correspond a 2^8 =256.
En d'autre terme le code suivant est équivant:
long val =( (B*256) + G) *256 + R
ou en décomposant
long val = (B*65535) + G *256 + R
-
Grou29
http://lienssanslien.free.fr
Le principe:
un pixel se décompose en 3 valeurs rouge, vert et bleu chacune codé sur un octet (valeur entre 0 et 255)
Souvent, ces trois valeur sont rassemblés dans une seule variable de 4 octets dont les bits 0 a 7 sont pour le rouge, de 8 à 15 pour le vert et 16 à 23 pour le rouge.
Le plus souvent on utilise les décalage pour faire ca comme ici;
long val =( (B<<8) + G) <<8 + R
(on prend le bleu, on décale de 8 octets vers la gauche, on ajoute le vert , on decale le tout de 8octets a gauche et on ajoute le rouge. (tu suis?)
ce qu'il faut savoir qu'un décalage d'un bit a gauche correspond a multiplié par 2 donc un décalage de 8 bits correspond a 2^8 =256.
En d'autre terme le code suivant est équivant:
long val =( (B*256) + G) *256 + R
ou en décomposant
long val = (B*65535) + G *256 + R
-
Grou29
http://lienssanslien.free.fr
grou29
Messages postés
39
Date d'inscription
mardi 27 octobre 2009
Statut
Membre
Dernière intervention
19 mai 2010
9
3 déc. 2009 à 09:13
3 déc. 2009 à 09:13
j'ai oublié d'expliquer le masquage:
le masquage se fait par l'opérateur & appelé "et" qui permet de mettre a zéro des bits.
si tu as val= 0x00112233 et un masq=0x0000FF00
le calcul val & masq donne 0x00002200. Tous les bits ou le masque est a 1 sont conservés et les autre mis a 0.
dans ton code, la ligne
++G[(ColorToRGB(pBitmap->Canvas->Pixels[x][y]) & MaskG)/256];
prend la couleur en x, y, mais un masque pour ne garder que la couleur verte et divise par 256 pour revenir sur une valeur sur 8 bits
C'est clair?
-
Grou29
http://lienssanslien.free.fr
le masquage se fait par l'opérateur & appelé "et" qui permet de mettre a zéro des bits.
si tu as val= 0x00112233 et un masq=0x0000FF00
le calcul val & masq donne 0x00002200. Tous les bits ou le masque est a 1 sont conservés et les autre mis a 0.
dans ton code, la ligne
++G[(ColorToRGB(pBitmap->Canvas->Pixels[x][y]) & MaskG)/256];
prend la couleur en x, y, mais un masque pour ne garder que la couleur verte et divise par 256 pour revenir sur une valeur sur 8 bits
C'est clair?
-
Grou29
http://lienssanslien.free.fr