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?

È stato utile?

Soluzione

Classe

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 [].

scroll top