Frage

Die getRGB() Methode gibt einen einzelnen int. Wie kann ich individuell die roten bekommen, grüne und blaue Farben alle als die Werte zwischen 0 und 255?

War es hilfreich?

Lösung

Java Farbe Klasse kann das tun Umwandlung:

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

Andere Tipps

Ein Pixel von einer 4-Byte (32 Bit) Ganzzahl dargestellt wird, etwa 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 Klassenmethoden 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       }

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, ich kann ehrlich nicht erinnern, und die Dokumentation gibt mir nicht sofort eine Antwort)

Für einfache Farbmanipulationen, können Sie

bufImg.getRaster().getPixel(x,y,outputChannels)

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

Dieses Verfahren hat 3 Ausgangstypen: int, float und double. Um einen Farbwert Bereich erhalten von 0 ~ 255, Ihr aktuellen Parameter outputChannels sollte ein int [] Array sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top