2010-04-11 7 views

Antwort

69

Color Klasse Java können die Konvertierung tun:

Color c = new Color(image.getRGB()); 
int red = c.getRed(); 
int green = c.getGreen(); 
int blue = c.getBlue(); 
+0

Das Erstellen einer neuen "Color" -Instanz für jedes Pixel eines Bildes erzeugt eine Menge Müll und kann * sehr * ineffizient sein. Wenn Sie vorhaben, jedes Pixel eines Bildes zu verarbeiten, ist es viel effizienter, die RGB-Farbe jedes Pixels mit 'bufferedImage.getRGB (x, y)' zu erhalten und die roten, grünen und blauen Komponenten wie in der Antwort beschrieben zu extrahieren von João Silva. – Marco13

7

Sie werden einige grundlegende binäre Arithmetik benötigen sie aufzuspalten:

int blue = rgb & 0xFF; 
int green = (rgb >> 8) & 0xFF; 
int red = (rgb >> 16) & 0xFF; 

(Oder vielleicht umgekehrt, kann ich ehrlich nicht erinnern und die Dokumentation gibt mir keine sofortige Antwort)

+0

Ich glaube, du hast Recht. – HyperNeutrino

105

Ein Pixel wird durch eine 4-Byte (32 Bit) Ganzzahl dargestellt, so:

00000000 00000000 00000000 11111111 
^ Alpha ^Red  ^Green ^Blue 

So werden die einzelnen Farbkomponenten zu erhalten, müssen Sie nur ein bisschen binäre Arithmetik:

int rgb = getRGB(...); 
int red = (rgb >> 16) & 0x000000FF; 
int green = (rgb >>8) & 0x000000FF; 
int blue = (rgb) & 0x000000FF; 

Dies ist in der Tat, was die java.awt.Color Klasse Methoden tun:

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  } 
6

Für einfache Farbmanipulationen, können Sie verwenden

Der outputChannels ist ein Array zum Speichern des abgerufenen Pixels. Die Länge hängt von der tatsächlichen Kanalanzahl Ihres Bildes ab. Zum Beispiel hat ein RGB-Bild 3 Kanäle; und ein RGBA-Bild hat 4 Kanäle.

Diese Methode hat 3 Ausgabetypen: int, float und double. Um einen Farbwert zwischen 0 und 255 zu erhalten, sollte Ihr tatsächlicher Parameter outputChannels ein int [] Array sein.

Verwandte Themen