# Farbe im Bild ersetzen



## RunDMC (31. Mrz 2008)

Hallo, 

ich habe ein kleines Problem und zwar habe ich ein jpg mit schwarzem Text drauf, nun möchte ich gern dieses dahingehend verändern das ich die Textfarbe auf z.B. Rot ändere. Gibt es da eine Möglichkeit?

Vielen Dank schonmal
RunDMC


----------



## tuxedo (31. Mrz 2008)

RunDMC hat gesagt.:
			
		

> Gibt es da eine Möglichkeit?



Einfach Frage, einfache Antwort: Ja ;-)

Gruß
Alex


----------



## Gast (31. Mrz 2008)

Danke, dann bin ich jetzt mal so dreist und frage dich wie!*gg

Gruß
RunDMC


----------



## tuxedo (31. Mrz 2008)

Du checkst die Pixel in deinem Bild und ersetzt alle die die Farbe schwarz haben durch welche mit der farbe rot. Fertig.

Du kannst auch die Farbpalette änden. Das geht schneller als die Pixel einzeln zu prüfen. Einfach einmal in der Farbtabelle rot mit schwarz tauschen.

Eine recht gute Bibliothek mit der du alles möglich mit Bildern anstellen kannst findest du hier: http://java.sun.com/javase/technologies/desktop/media/

- Alex


----------



## The_S (31. Mrz 2008)

geht aber auch mit einem einfachen BufferedImage ...


----------



## Niki (31. Mrz 2008)

Schau dir vielleicht mal die Klassen java.awt.image.PixelGrabber und java.awt.image.BufferedImage an. Mit dem PixelGrabber kannst du die Pixel holen und mit der Methode setRGB vom BufferedImage kannst du die Farbe ändern. Habe aber selber noch nie sowas gemacht und weiß daher auch nicht wie performant das ganze ist. Könnte mir schon vorstellen dass das ganze bei großen Bildern recht lange braucht.


----------



## RunDMC (31. Mrz 2008)

Vielen Dank für die Informationen, ich werde mir das alles mal reinziehen, hört sich gut an.

Gruß
RunDMC


----------



## Marco13 (31. Mrz 2008)

Das kann man auch mit so einem Lookupdingens machen.

```
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;

class ColorReplaceLookupTable extends LookupTable
{
    private Color srcColor;
    private Color dstColor;

    public ColorReplaceLookupTable(Color srcColor, Color dstColor)
    {
        super(0,1);
        this.srcColor = srcColor;
        this.dstColor = dstColor;
    }
    public int[] lookupPixel(int[] src, int[] dest)
    {
        if (src[0] == srcColor.getRed() &&
            src[1] == srcColor.getGreen() &&
            src[2] == srcColor.getBlue())
        {
            src[0] = dstColor.getRed();
            src[1] = dstColor.getGreen();
            src[2] = dstColor.getBlue();
        }
        return src;
    }
}


class ColorReplaceTest
{
    public static void main(String args[]) throws Exception
    {
        BufferedImage img = ImageIO.read(new File("bild1.gif"));
        BufferedImage image = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_RGB);
        image.getGraphics().drawImage(img, 0, 0, null);
        BufferedImageOp convertOp = new LookupOp(new ColorReplaceLookupTable(Color.BLUE, Color.GREEN), null);
        BufferedImage convertedImage = convertOp.filter(image, null );
        ImageIO.write(convertedImage, "jpg", new File("bild1_02.jpg"));
    }
}
```

Musst halt schaun ob das bei dir passt....


----------



## RunDMC (31. Mrz 2008)

Das mit dem LookUp ist schon ne super Sache funktioniert aber leider nur bedingt. Ich habe gemerkt das meine Schrift die ich ja einfärben will verschiedene Graustufen hat und somit nur ein kleiner Teil der Farbe erkannt wird, wie kann ich denn das umgehen?
Die anderen Ideen hab ich auch mal ausprobiert, bin aber leider auf keinen grünen Zweig gekommen.
Wäre super, wenn da jemand mein Brain mal pimpen könnte!*gg


----------



## tuxedo (31. Mrz 2008)

Wie wär's mit selbst Hirn benutzen?

Die Abfrage oben ist mit einem "==" gemacht und frägt nunmal exakt eine einen Farbton ab. Wenn du einen gewissen Farbbereich abfragen willst, solltest du mit > und < den Bereich eingrenzen und dann entsprechend die Farbe ersetzen.

- Alex


----------



## Gast (31. Mrz 2008)

und bevor die nächste frage hinterherkommt: ja, dass du jetzt überall rote sprenkel im bild hast ist normal und zur lösung des problems arbeite dich in das weitläufige thema bildverarbeitung ein


----------



## RunDMC (31. Mrz 2008)

Ja mit meinem Hirn ist es heute wohl nicht weit her, bin wohl noch WE geschädigt, da hätte ich auch drauf kommen können, danke genau das wars!*ggg


----------

