Java-如何在if语句中添加rgb值?

时间:2018-07-11 17:06:17

标签: java canvas graphics 2d bufferedimage

最近,我正在考虑制作游戏,因此我选择制作图像来制作地图。这是正常的图像,如下所示:

Level Image Example

我想为每个红色像素(255,0,0)用if语句绘制黑色矩形32x32。我做到了,但我无法使RGB工作:

loadMap()方法:

public void loadMap(BufferedImage image) {
    int w = image.getWidth();
    int h = image.getHeight();

    for(int xx = 0; xx < w; xx++) {
        for(int yy = 0; yy < h; yy++) {
            int pixel = image.getRGB(xx, yy);
            int alpha = (pixel >> 24) & 0xff;
            int red = (pixel >> 16) & 0xff;
            int green = (pixel >> 8) & 0xff;
            int blue = pixel & 0xff;                

            if(red == 255 && green == 0 && blue == 0)
                handler.addObject(new Wall(xx*32, yy*32, ID.Wall, this));

        }
    }
}

墙类

public class Wall extends GameObject {

public Wall(int x, int y, ID id) {
    super(x, y, id);
}

public void update() {

}

public void render(Graphics g) {
    g.setColor(Color.black);
    g.fillRect(x, y, 32, 32);
}

public Rectangle getBounds() {
    return new Rectangle(x, y, 32, 32);
}
}

GameObject类

public abstract class GameObject {

protected int x, y;
protected float speedX = 0, speedY = 0;
protected ID id;

public GameObject(int x, int y, ID id) {
    this.x = x;
    this.y = y;
    this.id = id;
}

public abstract void update();
public abstract void render(Graphics g);
public abstract Rectangle getBounds();

... //Getter's and Setter's
}

有人可以解释发生了什么吗?我在做错什么吗?

谢谢!

PS:我检查了图像上的RGB值,它们是正确的,但仍然不起作用:(

1 个答案:

答案 0 :(得分:1)

您的图像不包含0x00FF0000,它以不同的颜色呈现并进行了抗锯齿处理。我发现您的图片具有以下颜色:

(217,0,0) // main red
(127,0,0) // main anti aliased red
( 63,0,0) // bleeded anti aliased red

所以我可以试试看:

if ((red>120)&&(green==0)&&(blue==0)) ...;

如果条件允许,在其中添加()会更安全。

PS。,令人耳目一新的是,一个低级用户看到的问题包含我们为此+1所需的所有信息