Hallo,
ich stieß durch die SuFu (ja, hab sie wirklich benutzt )
auf folgenden, alten Thread:
Farbe im Bild ersetzen
Habe den Code rauskopiert, und abgeändert, wie in Post #8 von tuxedo vorgeschlagen.
Folgender Code ersetzt alle Farben (außer schwarz, graustufen) durch weiß, sodass ein schwarzer Text vom farbigen Hintergrund befreit wird.
den Wert für Faktor (ich weiß, dieser Variablenname ist schlecht gewählt) habe ich durch experimentieren auf 150 gesetzt.
Das Ergebnis ist okay, aber nicht optimal...
Mein Gedanke war:
Schwarz hat ja den RGB-Wert 0/0/0
Farbcodes - nützlich
und die angegebene Graustufen zwischen 0/0/0 und ~200/200/200
Passe ich nun die oben genannte Methode an auf folgendes:
So werden auch teilweise Grüntöne im Bild belassen.
Logisch, weil zb: "Darkgreen" mit 0/100/0 in mein Muster passt.
Mein Kopf raucht... wie kann ich die r-, g- und b-Werte so einschränken, dass nur Schwarz/-Grautöne im Bild belassen werden?
Vielen Dank schon einmal
ich stieß durch die SuFu (ja, hab sie wirklich benutzt )
auf folgenden, alten Thread:
Farbe im Bild ersetzen
Habe den Code rauskopiert, und abgeändert, wie in Post #8 von tuxedo vorgeschlagen.
Folgender Code ersetzt alle Farben (außer schwarz, graustufen) durch weiß, sodass ein schwarzer Text vom farbigen Hintergrund befreit wird.
Code:
package colorSwap;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
class ColorReplaceLookupTable extends LookupTable
{
int faktor;
private Color srcColor;
private Color dstColor;
public ColorReplaceLookupTable(Color srcColor, Color dstColor)
{
super(0,1);
faktor = 150;
this.srcColor = srcColor;
this.dstColor = dstColor;
}
public int[] lookupPixel(int[] src, int[] dest)
{
if ((src[0] >= srcColor.getRed()-faktor && src[0] <= srcColor.getRed()+faktor) &&
(src[1] >= srcColor.getGreen()-faktor && src[1] <= srcColor.getGreen()+faktor) &&
(src[2] >= srcColor.getBlue()-faktor && src[2] <= srcColor.getBlue()+faktor))
{ }else{
src[0] = dstColor.getRed();
src[1] = dstColor.getGreen();
src[2] = dstColor.getBlue();
}
return src;
}
public static void main(String args[]) throws Exception
{
BufferedImage img = ImageIO.read(new File("C://colorswap.jpg"));
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.BLACK, Color.WHITE), null);
BufferedImage convertedImage = convertOp.filter(image, null );
ImageIO.write(convertedImage, "jpg", new File("C://afterSwap.jpg"));
}
}
den Wert für Faktor (ich weiß, dieser Variablenname ist schlecht gewählt) habe ich durch experimentieren auf 150 gesetzt.
Das Ergebnis ist okay, aber nicht optimal...
Mein Gedanke war:
Schwarz hat ja den RGB-Wert 0/0/0
Farbcodes - nützlich
und die angegebene Graustufen zwischen 0/0/0 und ~200/200/200
Passe ich nun die oben genannte Methode an auf folgendes:
Code:
public int[] lookupPixel(int[] src, int[] dest)
{
if (src[0] <= 200 &&
src[1] <= 200 &&
src[2] <= 200)
{ }else{
src[0] = dstColor.getRed();
src[1] = dstColor.getGreen();
src[2] = dstColor.getBlue();
}
return src;
}
So werden auch teilweise Grüntöne im Bild belassen.
Logisch, weil zb: "Darkgreen" mit 0/100/0 in mein Muster passt.
Mein Kopf raucht... wie kann ich die r-, g- und b-Werte so einschränken, dass nur Schwarz/-Grautöne im Bild belassen werden?
Vielen Dank schon einmal