BufferedImage - Farbton verändern

0001001

Bekanntes Mitglied
Hallo,

ich habe ein Bild als BufferedImage vorliegen. Nun würde ich gerne den Farbton verändern, d.h. bspw. den RGB Wert jedes Pixels leicht verändern.
Kann mir jemand sagen wie man sowas in Java macht?
Als Beispiel hab ich mal ein Originalbild und ein verändertes Bild angehängt, so wie ich es gerne verändern würde.

Vielen Dank schon mal!
 

Anhänge

  • sunflower2.jpg
    sunflower2.jpg
    30,8 KB · Aufrufe: 61
  • sunflower.jpg
    sunflower.jpg
    8,7 KB · Aufrufe: 60

AlexSpritze

Bekanntes Mitglied
Wenn du das BufferedImage Objekt hast, kannst du mit der Methode .seRGB(x, y, rgb) den RGB-Wert an jeder Stelle des Bildes neu setzen. Mit .getRGB(x, y) holst du ihn dir vorher. x und y sind dabei die Koordinaten deines Bildes. rgb ist der RGB-Wert als int:

Code:
int rgb = rot << 16 | gruen << 8 | blau; // einzelnen Werte zwischen 0 und 255 inkl.
 

Marco13

Top Contributor
Kompakter und ""eleganter"" ginge es vielleicht mit ColorConvertOp (Java Platform SE 6). Vieeeel schneller als mit ein paar Additionen und bitshifts und setRGB geht es kaum. Außer, wenn man direkt ein BufferedImage.TYPE_INT_RGB erstellt, sich davon das Raster und davon den DataBuffer und davon das Data als int[] abholt, und da seine Daten reinschreibt. Flexibel und elegant ist was anderes, aber schnell ist das :D
 

0001001

Bekanntes Mitglied
Hm,
ich habs mal so probiert und das ist verdammt langsam. Vielleicht mach ich auch nur was falsch. Mit der Methode will ich zu jedem RGB Wert jedes Pixels einen Wert addieren:
Java:
    private static BufferedImage modifyPixelValues(BufferedImage image, int random) {

        for (int i = 0; i < image.getWidth(); i++) {
            for (int j = 0; j < image.getHeight(); j++) {
                int pixel = image.getRGB(i, j);


                int alpha = ((pixel >> 24) & 0xff);
                int red = (pixel >> 16) & 0xff;
                int green = (pixel >> 8) & 0xff;
                int blue = (pixel) & 0xff;
                if (alpha + random > 255) {
                    while (alpha < 255) {
                        alpha = alpha++;
                    }
                } else if (alpha + random < 0) {
                    while (alpha > 0) {
                        alpha = alpha--;
                    }
                } else {
                    alpha = alpha + random;
                }

                if (red + random > 255) {
                    while (red < 255) {
                        red = red++;
                    }
                } else if (red + random < 0) {
                    while (red > 0) {
                        red = red--;
                    }
                } else {
                    red = red + random;
                }

                if (green + random > 255) {
                    while (green < 255) {
                        green = green++;
                    }
                } else if (green + random < 0) {
                    while (green > 0) {
                        green = green--;
                    }
                } else {
                    green = green + random;
                }

                if (blue + random > 255) {
                    while (blue < 255) {
                        blue = blue++;
                    }
                } else if (blue + random < 0) {
                    while (blue > 0) {
                        blue = blue--;
                    }
                } else {
                    blue = blue + random;
                }
                int rgb = (alpha << 24) | (red << 16) | (green << 8) | blue;
                             image.setRGB(i, j, rgb);

            }
        }
        return image;
    }
 

Marco13

Top Contributor
Ähja... so ... Was ... sollen diese if-Abfragen und Schleifen da drin bewirken?


EDIT: Nur als Beispiel: Sowas wie
Code:
while (green < 255) {
    green = green++;
}
sollte vielleicht eher
Code:
green = 255;
sein, aber... je nachdem was da raus kommen soll, könnte man das 'random' ggf. gleich mit reinrechnen...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D BufferedImage resize Allgemeine Java-Themen 16
RalleYTN JOGL Texture in BufferedImage konvertieren Allgemeine Java-Themen 1
M Input/Output BufferedImage vertauscht width und height Allgemeine Java-Themen 6
G BufferedImage und ByteArray Allgemeine Java-Themen 2
P Threads BufferedImage, Thread Concurrency Allgemeine Java-Themen 1
M Problem mit BufferedImage und PrinterJob im Querformat Allgemeine Java-Themen 1
T BufferedImage verändert sich beim Einlsesen Allgemeine Java-Themen 1
M BufferedImage toString() überschreiben Allgemeine Java-Themen 5
Thallius PDF von einem BufferedImage erstellen Allgemeine Java-Themen 1
S BufferedImage vergleich mit Subimage Allgemeine Java-Themen 1
reibi OutOfMemoryError bei Behandlung von BufferedImage's Allgemeine Java-Themen 6
TheSorm BufferedImage spiegeln Allgemeine Java-Themen 3
A BufferedImage einzelne Pixel transparent machen V2.0 Allgemeine Java-Themen 2
S Undoable BufferedImage? Allgemeine Java-Themen 2
lumo 2D-Grafik BufferedImage und operationen darauf Allgemeine Java-Themen 2
K Image zu BufferedImage konvertieren Allgemeine Java-Themen 9
H BufferedImage Invertieren Allgemeine Java-Themen 13
D md5 berechnen für BufferedImage Allgemeine Java-Themen 5
D BufferedImage rotieren Allgemeine Java-Themen 8
TiME-SPLiNTER Binary BufferedImage automatisch croppen Allgemeine Java-Themen 4
F byte[] aus einem BufferedImage Allgemeine Java-Themen 3
J BufferedImage aus PNG Files haben keinen Type Allgemeine Java-Themen 4
T umwandeln BufferedImage to File Allgemeine Java-Themen 7
reibi BufferedImage nach InputStream Allgemeine Java-Themen 10
Q BufferedImage enzelne Pixel tranzparent machen Allgemeine Java-Themen 2
S BufferedImage mit Transparenten Hintergrund Allgemeine Java-Themen 4
Z Farbe des Pixels rechts unten in einem BufferedImage? Allgemeine Java-Themen 4
R problem! bufferedimage speichern. Allgemeine Java-Themen 7
S BufferedImage als *.tga speichern Allgemeine Java-Themen 3
H Pixel im BufferedImage Manipulieren ? Allgemeine Java-Themen 17
Steev BufferedImage und setRGB() Allgemeine Java-Themen 10
P miese performance bei nem BufferedImage + repaint :( Allgemeine Java-Themen 6
M Drucken mit BufferedImage Allgemeine Java-Themen 9
M Problem mit Durchsuchen von BufferedImage Allgemeine Java-Themen 10
I BufferedImage etc Allgemeine Java-Themen 6
F BufferedImage -> Image Allgemeine Java-Themen 4
G BufferedImage benutzen Allgemeine Java-Themen 6
U BufferedImage.getSubimage ? paintComponent ? Allgemeine Java-Themen 4
T Bilder schnell in BufferedImage laden Allgemeine Java-Themen 4
G BufferedImage zeichnen Allgemeine Java-Themen 4
T BufferedImage aus einem byte-Array? Allgemeine Java-Themen 2
T BufferedImage problem Allgemeine Java-Themen 6
K 32-Bit grayscale BufferedImage Allgemeine Java-Themen 2
T Geschwindigkeit bei Polygonen und BufferedImage Allgemeine Java-Themen 9
O PDF auslesen und verändern, was ist besser iText oder PDFBox ? Allgemeine Java-Themen 9
J Hinergrund und Position verändern Allgemeine Java-Themen 2
M Array verändern Allgemeine Java-Themen 1
N Eigenschaften eines Buttons per Setter verändern Allgemeine Java-Themen 5
S TestNG Eclipse: Reporting erstellen/ verändern Allgemeine Java-Themen 0
X Threads Externe Variablen in Run Methoden verändern Allgemeine Java-Themen 4
T Teile eines Double-Wertes verändern Allgemeine Java-Themen 2
A Methoden verändern Allgemeine Java-Themen 12
A Metadaten von Bildern auslesen und verändern Allgemeine Java-Themen 5
L JAR verändern - JAVAC soll einfach nur kompilieren, ohne Prüfungen Allgemeine Java-Themen 16
P docx mit Apache POI auslesen, verändern und zurückschreiben Allgemeine Java-Themen 2
A variable aus einer anderen klasse verändern Allgemeine Java-Themen 5
L Parameter-Objekte verändern oder nicht? Allgemeine Java-Themen 6
J Parameter absichtlich für außen verändern Allgemeine Java-Themen 4
M Arraylist - Inhalte in Textferldern anzeigen, verändern und löschen. Allgemeine Java-Themen 18
N Verändern von Timereinstellungen Allgemeine Java-Themen 2
M Ein Array-Wert soll sich verändern, aber 2 tun es? Allgemeine Java-Themen 7
S Youtube Hits verändern??? Allgemeine Java-Themen 7
G Preise am Server verändern Allgemeine Java-Themen 4
E Eine .wsp datei in java öffnen auslesen und verändern Allgemeine Java-Themen 4
H Keyboard-Layout verändern Allgemeine Java-Themen 4
P DockingFrame Farbe der Tabs verändern Allgemeine Java-Themen 4
M Int und String Variablen verändern Allgemeine Java-Themen 10
M Objekt nachträglich verändern Allgemeine Java-Themen 12
F OutOfMemoryError: Java heap space - Speicher verändern Allgemeine Java-Themen 8
H JTable Wert verändern Allgemeine Java-Themen 3
D Lautstärke einzelner AudioClips zur Laufzeit verändern Allgemeine Java-Themen 4
S Bild Größe verändern Allgemeine Java-Themen 2
H Fenstergröße verändern Allgemeine Java-Themen 10
F Dateien auf dem eigenen Server verändern? Allgemeine Java-Themen 3
L Textdatei einlesen und verändern Allgemeine Java-Themen 3
E Mauszeiger verändern? Allgemeine Java-Themen 4
R Parameter in einer Methode verändern Allgemeine Java-Themen 5
X Bestimmtes Muster in Textdatei verändern Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben