Мне нужно заполнить этот оттенок серого цветом, например, красным. Я думал использовать алгоритм Flood Fill, потому что мне нужно заполнить некоторые определенные моменты.Алгоритм наложения наполнителей для изображения сглаживания в сглаживании Java
Я нашел этот метод. Но результат имеет некоторые уродливые белые части из-за сглаживания линий изображения.
в моем коде: Цвет targetColor = белый, Цвет заменыColor = Красный.
Думаю, мне нужно заменить замену на более серые цвета, а не только белые.
Должен ли я придерживаться этого метода и немного изменить? или найти что-то еще? Если да, что изменить?
Я попытался также эту ссылку, но она не работает:
noblemaster.com/public/download/FloodFill.java.html
ссылка на изображение:
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);
}
}
Возможно, вы не должны сравнивать его с «точным» белым цветом. Попробуйте вычислить расстояние от пикселя до белого, и если оно меньше некоторого значения * X *, вы должны нарисовать его также красным цветом. – raven
Это может помочь: http://stackoverflow.com/questions/2103368/color-logic-algorithm – raven
Хорошо, это работает, но все еще есть что-то, что я пропустил. Если я хочу перейти от белого к прозрачному. Теперь расстояние цвета не может быть выполнено, потому что rgb не учитывает альфа-компонент. Но я думаю, что это по другому вопросу .. –