Représentation des couleurs
La valeur RVB est un nombre entier, elle est donc représentée en mémoire par 4 octets (ou équivalents à 32 bits).
Exemple :
00000001 00000010 00000011 00000100
Chaque octet représente une composante de la couleur :
- 1er octet : valeur alpha (00000001 dans l'exemple) qui correspond à l'opacité
- 2ème octet : valeur du rouge (00000010 dans l'exemple)
- 3ème octet : valeur du vert (00000011 dans l'exemple)
- 4ème octet : valeur du bleu (00000100 dans l'exemple)
Symboles 0xff et 0xffffff
0xff représente la valeur hexadécimale FF qui est égale à l'entier 255. Sa représentation binaire est :
00000000 00000000 00000000 11111111
De même, 0xffffff est représenté par :
00000000 11111111 11111111 11111111
Il correspond à la couleur blanche (rouge, vert et bleu égaux à 255).
& opérateur
L'opérateur binaire et "&" est appliqué sur deux entiers i1 et i2 (i1 & i2). Il retourne un entier dont tous les bits sont égaux à 0 sauf ceux qui sont égaux à 1 dans i1 et i2. Par exemple, si on applique & sur mon premier exemple et sur 0xff, on obtient :
00000000 00000000 00000000 00000100
En conséquence, (& 0xff) permet de ne conserver que les valeurs du dernier octet (c'est-à-dire la valeur de la composante bleue de la couleur).
// If the blue component of image.getRGB(i, j) is greater than b
if ((image.getRGB(i, j) & 0xff) > b) {
// Set the image to white
image.setRGB(i, j, 0xffffff) ;
} else {
// Set the image to black
image.setRGB(i, j, 0x000000);
}