La méthode getRGB()
renvoie un seul int. Comment puis-je obtenir individuellement les couleurs rouge, vert et bleu en tant que valeurs comprises entre 0 et 255?
Java Color class peut faire la conversion:
Color c = new Color(image.getRGB());
int red = c.getRed();
int green = c.getGreen();
int blue = c.getBlue();
Un pixel est représenté par un entier de 4 octets (32 bits), comme suit:
00000000 00000000 00000000 11111111
^ Alpha ^Red ^Green ^Blue
Donc, pour obtenir les composants de couleur individuels, vous avez juste besoin d'un peu d'arithmétique binaire:
int rgb = getRGB(...);
int red = (rgb >> 16) & 0x000000FF;
int green = (rgb >>8 ) & 0x000000FF;
int blue = (rgb) & 0x000000FF;
C'est en effet ce que le Java.awt.Color
les méthodes de classe font:
553 /**
554 * Returns the red component in the range 0-255 in the default sRGB
555 * space.
556 * @return the red component.
557 * @see #getRGB
558 */
559 public int getRed() {
560 return (getRGB() >> 16) & 0xFF;
561 }
562
563 /**
564 * Returns the green component in the range 0-255 in the default sRGB
565 * space.
566 * @return the green component.
567 * @see #getRGB
568 */
569 public int getGreen() {
570 return (getRGB() >> 8) & 0xFF;
571 }
572
573 /**
574 * Returns the blue component in the range 0-255 in the default sRGB
575 * space.
576 * @return the blue component.
577 * @see #getRGB
578 */
579 public int getBlue() {
580 return (getRGB() >> 0) & 0xFF;
581 }
Vous aurez besoin d'une arithmétique binaire de base pour le diviser:
int blue = rgb & 0xFF;
int green = (rgb >> 8) & 0xFF;
int red = (rgb >> 16) & 0xFF;
(Ou peut-être l'inverse, honnêtement, je ne me souviens pas et la documentation ne me donne pas de réponse instantanée)
Pour les manipulations de couleurs simples, vous pouvez utiliser
bufImg.getRaster().getPixel(x,y,outputChannels)
Le OutputChannels est un tableau pour stocker le pixel récupéré. Sa longueur dépend du nombre réel de canaux de votre image. Par exemple, une image RVB a 3 canaux; et une image RGBA a 4 canaux.
Cette méthode a 3 types de sortie: int, float et double. Pour obtenir une plage de valeurs de couleur de 0 à 255, votre paramètre outputChannels réel doit être un tableau int [].