Il metodo getRGB restituisce un singolo int. Come posso ottenere individualmente i colori rosso, verde e blu come valori compresi tra 0 e 255?Java BufferedImage diventando rosso, verde e blu singolarmente
risposta
Color classe di Java può fare la conversione:
Color c = new Color(image.getRGB());
int red = c.getRed();
int green = c.getGreen();
int blue = c.getBlue();
avrete 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, posso onestamente Ricordo che la documentazione non mi dà una risposta immediata)
Credo che tu abbia ragione. – HyperNeutrino
Un pixel è rappresentato da un numero intero a 4 byte (32 bit), ad esempio:
00000000 00000000 00000000 11111111
^ Alpha ^Red ^Green ^Blue
Quindi, per ottenere i singoli componenti di colore, basta 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 i metodi della classe java.awt.Color
fanno:
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 }
Per semplice manipolazioni di colore, è possibile utilizzare
bufImg.getRaster().getPixel(x,y,outputChannels)
OutputChannels è una matrice per la memorizzazione del pixel recuperato. La sua lunghezza dipende dal numero di canali effettivi dell'immagine. Ad esempio, un'immagine RGB ha 3 canali; e un'immagine RGBA ha 4 canali.
Questo metodo ha 3 tipi di output: int, float e double. Per ottenere un valore di colore compreso tra 0 e 255, il proprio parametro outputChannels dovrebbe essere un array int [].
- 1. Come ottengo rosso blu verde e alfa indietro da un oggetto UIColor?
- 2. UIColor colorWithRed: verde: blu: produce sempre nero
- 3. isomorfismi grafico colorato: 1 (rosso) -> 2 (blu) vs 1 (blu) -> 2 (rosso)
- 4. Imposta il colore di molte div da verde a rosso
- 5. Differenza tra Immagine e BufferedImage in Java
- 6. Thread verde e thread nativi in java
- 7. BufferedImage a BMP in Java
- 8. Come calcolare java BufferedImage filesize
- 9. Come lanciare BufferedImage in java
- 10. Il caricamento di un BMP in trame OpenGL cambia i colori rosso e blu. (C++/Windows)
- 11. Come decidere quale tipo di immagine BufferedImage usare?
- 12. fare qualche testo in printf appaiono in verde e rosso gcc
- 13. Generare colori tra rosso e verde per una gamma di ingresso
- 14. imgscalr con sfondo rosso
- 15. Regola la luminosità e il contrasto di BufferedImage in Java
- 16. Java: BufferedImage alla matrice di byte e ritorno
- 17. Java: VolatileImage più lento di BufferedImage
- 18. dinamicamente ridimensionare un BufferedImage in Java
- 19. Java BufferedImage in formato PNG Base64 String
- 20. Come carico correttamente un BufferedImage in java?
- 21. Nome classe Studio Android verde?
- 22. Accesso newline diventando _x000D_
- 23. In cerca di IntelliJ Idea tema per qualcuno daltonico rosso-verde
- 24. Determinare a livello di colore leggibile l'uomo (ad esempio Rosso, Verde, ecc.) Di un'immagine
- 25. Aggiorna mappa utilizzando findAll e singolarmente in
- 26. BufferedImage immagine JavaFX per
- 27. UIColor colorWithRed: verde: blu: alpha: restituisce sempre bianco a meno che un argomento è 0
- 28. Come jenkins determina il colore della barra di avanzamento (blu o rosso)
- 29. Sottolineatura Visual Studio in verde _ (non ondulato verde)
- 30. Come posso scoprire dove un BufferedImage ha Alpha in Java?
La creazione di una nuova istanza 'Color' di ogni pixel di un'immagine genera un sacco di immondizia e può essere * molto * inefficiente. Se si pianifica di elaborare ogni pixel di un'immagine, è molto più efficiente ottenere il colore RGB di ogni pixel con 'bufferedImage.getRGB (x, y)' ed estrarre i componenti rosso, verde e blu come descritto nella risposta di João Silva. – Marco13