Farbe im Bild ersetzen

  • Themenstarter Themenstarter RunDMC
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
R

RunDMC

Gast
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
 
🙂 Danke, dann bin ich jetzt mal so dreist und frage dich wie!*gg

Gruß
RunDMC
 
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
 
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.
 
Vielen Dank für die Informationen, ich werde mir das alles mal reinziehen, hört sich gut an.

Gruß
RunDMC
 
Das kann man auch mit so einem Lookupdingens machen.
Code:
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....
 
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
 
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
 
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 😉
 
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
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben