Comment interpréter le tableau renvoyé à partir de la méthode de construction GetPixels pour un bitmap?
Voici mon code: p> Le tableau "pixels" est retourné Avec des valeurs de -988 602 635 à 1 212,635 509 et qui venait de quelques couleurs sur un simple fichier PNG que j'ai fait. Comment interpréter les chiffres qui sont renvoyés de cette méthode? P> EDIT: Je réalise que cet entier unique représente une couleur. Je ne comprends tout simplement pas comment interpréter cet entier unique dans les valeurs RBG et Alpha qui composent la couleur. P> merci. P> ps. Si vous vous demandez », qu'est-ce qu'il essaie de faire?" J'essaie de comprendre un moyen de modifier dynamiquement la couleur d'un bitmap. P> p>
5 Réponses :
Il renvoie un int pour le classe de couleurs.
La classe de couleur définit des méthodes pour Création et conversion de couleur int. Les couleurs sont représentées comme
into-emballés forts>, composé de 4 octets: alpha, rouge, vert, bleu. Les valeurs sont imprévues, ce qui signifie qu'une transparence est stockée uniquement dans le composant alpha, et non dans les composants de la couleur. Les Les composants sont stockés comme suit (alpha << 24) | (rouge << 16) | (vert fort> << 8) | bleu fort>. Chaque composant varie entre 0..255 avec 0 signification non contribution pour ce composant, et 255 signifiant 100% contribution. Ainsi opaque-noir serait 0xFF000000 (100% opaque mais non contribue de rouge, gree, bleu et opaque-blanc seraient 0xFFFFFFFF P> BlockQuote> Par exemple, lorsque vous utilisez l'objet de peinture: p>
xxx pré>
setColor code> attend un int. Color.red est la valeur int pour leur signification prédéfinie de "rouge". P> p>
Hey merci, mais je sais que c'est une couleur. J'aurais dû formuler ma question mieux, de demander ce que je voulais vraiment. C'est mon mauvais et ça a été édité. +1.
@ user432209 Voir ma partie citée. (alpha << 24) | (rouge << 16) | (vert << 8) | Le bleu est de savoir comment les couleurs sont emballées dans l'INT.
C'est la partie que je ne comprends pas. (alpha << 24) | (rouge << 16) | (vert << 8) n'a aucun sens pour moi.
C'est une logique bit où << signifie changer de vitesse gauche et | signifie ou. en.wikipedia.org/wiki/bitwise_opération
Chaque pixel est de 8 bits dans un pixel RGB32. Il est courant d'emballer rouge, vert, bleu et aujourd'hui, alpha dans un entier de données de 32 bits. Le << déplace les bits autour des positions 8, 16 et 24 bits essentiellement, il vous aide à placer des bits 1 à 8, 9-16, 17-24 et 25-32. Avez-vous déjà vu #AarrgGBBB ou 0xAarrgGBBBB? Un chiffre hexagonal est de 4 bits et deux chiffres hexagonaux sont de 8 bits.
Si vous avez vos valeurs alpha, rouge, vert et bleues, votre couleur est égale à (alpha << 24) + (rouge << 16) + (vert << 8) + bleu.
Pour récupérer Vos valeurs alpha, rouge, vert et bleues d'un INT, disent argum: p>
Encore plus:
int alpha=argb>>24; int red=(argb & 0x00FF0000)>>16; int green=(argb & 0x0000FF00)>>8; int blue=(argb & 0x000000FF);
Vous pouvez également faire ce qui suit pour récupérer les couleurs de UN INT:
int mColor = 0xffffffff; int alpha = Color.alpha(mColor); int red = Color.red(mColor); int green = Color.green(mColor); int blue = Color.blue(mColor);
En plus de cela, je pense que cela devrait être Les coordonnées commencent à 0, non? p> p> p>
Selon le doc pour GetPixels , Stride doit être> = largeur de bitmap . Vous avez utilisé '0' pour la foulée ici.
Le troisième paramètre est de la foulée, ce qui équivaut à la largeur de l'exemple. La liste des paramètres est la suivante: Int [] pixels, int Ofacset, int Stride, int x, int Y, largeur int largeur, int hauteur code>
Vos arguments simples pour GetPixels vient de m'avoir sauvé ...