Hallo, ich habe eine methode geschrieben, die ein neues bufferedimage zurückliefert, was von einem anderen "abgeleitet" wird.
Sprich:
Ich möchte wie oben auch steht bei einer Ähnlichkeit von 30% die Farbe ändern, die Farbe ist in dem Beispiel ein weiß (ganz genau sogar). Die methode mit der Similarity ist:
Jedoch klappt diese methode nicht gut. 1. wird entweder ein sehr niedriger oder ein sehr hoher wert zurückgeliefert und bei weiß klappt gar nichts, weil ja 0 * x = 0 ist.
Gibt es eine bessere Methode?
Sprich:
Java:
public static void drawOverImage(Graphics2D g2, Color replace, Color color, BufferedImage source) {
for (int i = 0; i < source.getWidth(); i++)
for (int j = 0; j < source.getHeight(); j++) {
if (isTransparent(i, j, source))
continue;
int rgb = source.getRGB(i, j);
if (getSimilarityOf(new Color(rgb), replace) <= /* TODO */ 0.3)
g2.setColor(color);
else
g2.setColor(new Color(rgb));
g2.fillRect(i, j, 1, 1);
}
}
Java:
public static double getSimilarityOf(Color c, Color c1) {
int r = c.getRed(), g = c.getGreen(), b = c.getBlue();
double tB = sqrt(r * r + g * g + b * b) / sqrt(255 * 255 * 3);
r = c1.getRed();
g = c1.getGreen();
b = c1.getBlue();
double tB1 = sqrt(r * r + g * g + b * b) / sqrt(255 * 255 * 3);
if (c.equals(Color.white))
System.out.println(abs(tB - tB1));
return abs(tB - tB1);
}
Gibt es eine bessere Methode?