Java BufferedImage ottenendo rosso, verde e blu singolarmente
-
26-09-2019 - |
Domanda
Il metodo getRGB()
restituisce un singolo int. Come posso ottenere singolarmente i colori rosso, verde e blu tutti come i valori compresi tra 0 e 255?
Soluzione
colori può fare il conversione:
Color c = new Color(image.getRGB());
int red = c.getRed();
int green = c.getGreen();
int blue = c.getBlue();
Altri suggerimenti
Un pixel è rappresentato da un numero intero di 4 byte (32 bit), in questo modo:
00000000 00000000 00000000 11111111
^ Alpha ^Red ^Green ^Blue
Quindi, per ottenere le singole componenti di colore, è solo bisogno di un po 'di aritmetica binaria:
int rgb = getRGB(...);
int red = (rgb >> 16) & 0x000000FF;
int green = (rgb >>8 ) & 0x000000FF;
int blue = (rgb) & 0x000000FF;
Questo è davvero quello che il href="http://www.docjar.com/html/api/java/awt/Color.java.html" rel="noreferrer"> java.awt.Color
metodi di classe
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 }
Si avrà bisogno di un po 'di aritmetica binaria di base per dividerlo:
int blue = rgb & 0xFF;
int green = (rgb >> 8) & 0xFF;
int red = (rgb >> 16) & 0xFF;
(O forse il contrario, io onestamente non ricordo e la documentazione non mi sta dando una risposta immediata)
Per semplici manipolazioni dei colori, è possibile utilizzare
bufImg.getRaster().getPixel(x,y,outputChannels)
I canalediuscitadelfinale è un array per memorizzare il pixel recuperato. La sua lunghezza dipende dal numero di canale attuale della vostra immagine. Ad esempio, un'immagine RGB ha 3 canali; e un'immagine RGBA dispone di 4 canali.
Questo metodo ha 3 tipi di output: int, float e double. Per ottenere un valore di colore varia da 0 ~ 255, le vostre canalediuscitadelfinale effettivi dei parametri devono essere un array int [].