我正在尝试为我的游戏编写一个方法,该方法将获取图像、旧颜色的十六进制值和新颜色的十六进制值,然后将旧颜色的所有像素转换为新颜色。现在,该方法将整个图像绘制为新颜色,就好像 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]
第二条线看起来是正确的,临时颜色和旧的相同,但显然第一条不是这种情况。我也尝试创建一个新的 BufferedImage 并复制像素,但结果相同...... equals 方法是否像我认为的那样不起作用,或者整个方法不起作用并且有更好的方法来做到这一点?感谢您提前提供帮助。