Die getRGB-Methode gibt ein einzelnes int zurück. Wie kann ich einzeln die roten, grünen und blauen Farben als Werte zwischen 0 und 255 erhalten?Java BufferedImage wird einzeln rot, grün und blau
Antwort
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();
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)
Ich glaube, du hast Recht. – HyperNeutrino
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 }
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.
- 1. Esp8266 blau und rot konstant auf
- 2. "colorWithCalibratedRed: grün: blau: alpha:" funktioniert nicht
- 3. UIColor colorWithRed: grün: blau: produziert immer schwarz
- 4. Simple jes Funktion zum Umschalten einer Bilderfarbe von Rot auf Grün oder Blau?
- 5. SVN Icon Overlays zeigen grün statt rot
- 6. Highcharts solidgauge mit grün/gelb/rot gradient
- 7. Gauge Graph mit Farbverlauf grün-gelb-rot
- 8. einen Text in printf machen erscheinen in grün und rot
- 9. Wie Jenkins die Farbe des Fortschrittsbalkens bestimmen (blau oder rot)
- 10. Javascript Farbverlauf sogar geteilt, blau bis grau zu rot
- 11. Java Umwandlung Bild BufferedImage
- 12. Java BufferedImage Auflösung
- 13. Java: BufferedImage zu Byte-Array und zurück
- 14. imgscalr mit Hintergrund rot
- 15. BufferedImage zu BMP in Java
- 16. Java: VolatileImage langsamer als BufferedImage
- 17. mit CSS zur Abrundung der Nummer und zeigen Zahlen in rot oder grün
- 18. Rails/Bootstrap - Flash Hinweis: Erfolg ist jetzt rot und nicht grün?
- 19. Graustufenbild wird monochrom, wenn BufferedImage verwendet wird
- 20. Android Studio Klassenname grün?
- 21. Probleme rotieren BufferedImage
- 22. Java Delimiter Zeichen einzeln drucken
- 23. BufferedImage als Farbe in Java einstellen
- 24. Hinzufügen von Farben (Farben) Zusammen wie Malen (Blau + Gelb = Grün, usw.)
- 25. blau und weiß in Wabenalertdialog
- 26. WAMP wird nicht grün. Und der VCRUNTIME140.dll Fehler
- 27. Stellen Sie die Farbe vieler Divs von grün bis rot ein
- 28. Java erstellt ein BufferedImage und ein Unterbild daraus
- 29. Unterschied zwischen dem Image und BufferedImage in Java
- 30. Prolog - Unterschiede zwischen Rot- und Grünschnitt
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