Comme vous l'avez sûrement lu dans le titre, je cherche à récupérer la couleur d'un pixel. Je connais la fonction get(x, y);, mais quand je regarde la valeur que prend ma variable color, c'est un peu bizarre : c'est des nombres négatifs du genre -15624562 ou - 17896.
Le but c'est de récupérer le code RVB pour isoler ensuite les 3 composantes et leurs faire quelques calculs.
int a = (argb >> 24) & 0xff;
int r = (argb >> 16) & 0xff;
int g = (argb >> 8) & 0xff;
int b = argb & 0xff;
Où argb est ta valeur.
Enfaite tes 4 valeurs sont codées entre 0 et 255, soit un byte. Et donc les 4 valeurs ensemble font 4 bytes, soit 1 int. Donc en gros ta valeur obtenue était toutes les couleurs confondues, et donc ce mini code permet de récupérer les bytes un par un afin de récupérer les valeurs d'origines.
Si tu connais un peu le fonctionnement de la mémoire, tu comprendras
int a = (argb >> 24) & 0xff;
int r = (argb >> 16) & 0xff;
int g = (argb >> 8) & 0xff;
int b = argb & 0xff;
Où argb est ta valeur.
Enfaite tes 4 valeurs sont codées entre 0 et 255, soit un byte. Et donc les 4 valeurs ensemble font 4 bytes, soit 1 int. Donc en gros ta valeur obtenue était toutes les couleurs confondues, et donc ce mini code permet de récupérer les bytes un par un afin de récupérer les valeurs d'origines.
Si tu connais un peu le fonctionnement de la mémoire, tu comprendras
J'ai bien compris ce que tu me dis, mais déjà il n'y a que 3 valeurs normalement : le rouge, le vert et le bleu. Et dans ce cas d'ou viens le - (moins) ? Une composante ne peut être négative
Faut, il y a 4 valeurs par pixel. Le taux de rouge, le taux de vert, le taux de bleu et l'opacité (A).
Après l'opacité n'est pas supporté par tout les formats d'images (notamment les jpg), donc effectivement le a peut être enlever si tu n'utilise pas l'opacité.
Après pour l'histoire du nombre négatif, c'est car tu tente d'afficher un nombre à 4 bytes alors que ce n'est pas un nombre mais 4x1 byte (oui c'est différent). La mémoire ne peut stocker que des nombres, après il faut lire ce nombre correctement afin de récupérer ce qui tu veut (un caractère par exemple). En gros tu tente d'afficher un int qui n'en n'est pas un
while (true) { be happy }
while (true) { be happy }
while (true) { be happy }