Java BufferedImage immer rot, grün und blau einzeln
-
26-09-2019 - |
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?
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.