Je dois remplir cette image en niveaux de gris avec une couleur, par exemple rouge. J'ai pensé utiliser l'algorithme Flood Fill parce que j'ai besoin de remplir certains points.Algorithme Flood Fill pour une image en niveaux de gris anti-aliasing Java
J'ai trouvé ce method.But le résultat a quelques parties blanches laid, à cause de l'anti-aliasing des lignes de l'image.
dans mon code: Couleur targetColor = Blanc, Couleur replacementColor = Rouge.
Je pense que j'ai besoin de changer le remplacement en plus de couleurs grises, pas seulement blanc.
Dois-je m'en tenir à cette méthode et changer un peu? ou pour trouver autre chose? Si oui, que changer?
Je n'ai aussi essayé ce lien, mais il ne fonctionne pas:
noblemaster.com/public/download/FloodFill.java.html
lienpour les images:
public void floodFill(BufferedImage image, Point node, Color targetColor, Color replacementColor) {
int width = image.getWidth();
int height = image.getHeight();
int target = targetColor.getRGB();
int replacement = replacementColor.getRGB();
if (target != replacement) {
Deque<Point> queue = new LinkedList<Point>();
do {
int x = node.x;
int y = node.y;
while (x > 0 && image.getRGB(x - 1, y) == target) {
x--;
}
boolean spanUp = false;
boolean spanDown = false;
while (x < width && image.getRGB(x, y) == target) {
image.setRGB(x, y, replacement);
if (!spanUp && y > 0 && image.getRGB(x, y - 1) == target) {
queue.add(new Point(x, y - 1));
spanUp = true;
} else if (spanUp && y > 0 && image.getRGB(x, y - 1) != target) {
spanUp = false;
}
if (!spanDown && y < height - 1 && image.getRGB(x, y + 1) == target) {
queue.add(new Point(x, y + 1));
spanDown = true;
} else if (spanDown && y < height - 1 && image.getRGB(x, y + 1) != target) {
spanDown = false;
}
x++;
}
} while ((node = queue.pollFirst()) != null);
}
}
Essayez de calculer la distance du pixel avec le blanc et si elle est inférieure à une valeur * X *, vous devriez aussi la peindre en rouge. – raven
Cela pourrait aider: http://stackoverflow.com/questions/2103368/color-logic-algorithm – raven
Ok cela fonctionne, mais il y a encore quelque chose que j'ai raté. Si je veux passer du blanc à la transparence. Maintenant, la distance de couleur ne peut pas être effectuée car rgb ne prend pas en compte un composant alpha. Mais je pense que c'est pour une autre question .. –