Я пытаюсь написать метод для своей игры, который примет изображение, шестнадцатеричное значение для старого цвета и шестнадцатеричное значение для нового цвета, а затем преобразует все пиксели старого цвета в новый цвет. В настоящий момент метод окрашивает весь образ в новый цвет, как если бы оператор if вообще не работал. Этот метод:Преобразование цветов
private void convertColors(BufferedImage img, int oldColor, int newColor)
{
Graphics g = img.getGraphics();
g.setColor(new Color(newColor));
Color old = new Color(oldColor);
for(int x = 0; x < img.getWidth(); x++)
{
for(int y = 0; y < img.getHeight(); y++)
{
Color tmp = new Color(img.getRGB(x, y));
if(tmp.equals(old));
{
System.out.println("Temp=" + tmp.toString() + "Old=" + old.toString() + "New=" + g.getColor().toString());
g.fillRect(x, y, 1, 1);
}
}
}
g.dispose();
}
* Шестнадцатеричное для oldColor является 0xFFFFFF
(белый) и для newColor является 0xFF0000
(красный).
Используя метод Println я получаю такого рода результаты:
Temp=java.awt.Color[r=0,g=0,b=0]Old=java.awt.Color[r=255,g=255,b=255]New=java.awt.Color[r=255,g=0,b=0]
Temp=java.awt.Color[r=255,g=255,b=255]Old=java.awt.Color[r=255,g=255,b=255]New=java.awt.Color[r=255,g=0,b=0]
scond линия выглядит правильно, цвет температура и старый одинаковы, но это явно не тот случай с первым. Я также попытался создать новый BufferedImage и скопировать пиксели, но это оставляет тот же результат ... Не работает ли метод equals, как я думаю, он делает или весь этот метод просто не работает, и есть лучший способ сделать это? Спасибо за помощь.
Получение цветов с помощью getRGB и рисование крошечных прямоугольников - это будет медленно, особенно для игры. Быстрый способ состоял бы в том, чтобы непосредственно манипулировать массивом int, который находится за BufferedImage, а затем нарисовать измененное изображение за один раз. – lbalazscs
@lbalazscs вы правы в этом, я в настоящее время googling, как реализовать, и rgb-фильтр, который соответствует его потребностям. но поскольку он меняет графику изображения, было бы недостаточно назвать эту функцию один раз, после чего сохраненное изображение будет иметь правильные цвета !? – luk2302
@lbalazscs Когда я пытаюсь сделать это: если (в пикселях [х + у * img.getWidth()] == oldColor) \t \t \t \t { \t \t \t \t \t пикселей [х + у * IMG.getWidth()] = newColor; \t \t \t} он переходит в оператор if, но изменение никогда не появляется, хотя я вызываю setRGB: newImg.setRGB (0, 0, img.getWidth(), img.getHeight(), pixels, 0, img.getWidth()); Кстати, что такое офсет и просканировка? – StrongJoshua