11
votes

Explication de la méthode GetPixels pour un bitmap dans Android

Comment interpréter le tableau renvoyé à partir de la méthode de construction GetPixels pour un bitmap?

Voici mon code: xxx

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?

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.

merci.

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.


1 commentaires

Vos arguments simples pour GetPixels vient de m'avoir sauvé ...


5 Réponses :


11
votes

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 , 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 << 8) | bleu . 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

Par exemple, lorsque vous utilisez l'objet de peinture: xxx

setColor attend un int. Color.red est la valeur int pour leur signification prédéfinie de "rouge".


5 commentaires

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.



1
votes

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: xxx


0 commentaires

5
votes

Encore plus:

int alpha=argb>>24;
int red=(argb & 0x00FF0000)>>16;
int green=(argb & 0x0000FF00)>>8;
int blue=(argb & 0x000000FF);


0 commentaires

14
votes

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);


0 commentaires

0
votes

En plus de cela, je pense que cela devrait être xxx

Les coordonnées commencent à 0, non?


2 commentaires

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