【问题标题】:Java - How can I add rgb values in an if statement?Java - 如何在 if 语句中添加 rgb 值?
【发布时间】:2018-07-11 17:06:16
【问题描述】:

最近我想制作一个游戏,我选择使用图像来制作地图。这是一张普通的图片,像这样:

我希望每个红色像素 (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);
}
}

游戏对象类

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 值,它们是正确的,但它仍然不起作用:(

【问题讨论】:

  • 可能只是复制到 SO 时的拼写错误,但您在红色后缺少 &amp;if(red == 255 &amp; green == 0 &amp;&amp; blue == 0)
  • @Richard 编辑了它,我的坏 xD。但它仍然不起作用:/

标签: java canvas graphics 2d bufferedimage


【解决方案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)) ...;

在 if 条件中添加 () 让我感觉更安全。

PS。令人耳目一新的低代表用户的问题包含我们需要 +1 的所有信息

【讨论】:

  • 有没有办法让红色通道变成255?我使用 Paint.net,程序说我有 R 255、G 0 和 B 0...你能建议我一个好的程序来制作具有我想要的值的地图吗?
  • @FrancescoMesiano 我正在使用 MS Paint 来做类似的事情。我没有在.net 下编码,所以我可能是错的,但我怀疑您正在沿途的某个地方重新缩放图像,这可能会导致出血行为。另一个选项可以是启用某些主题或着色器或透明度叠加,或将图像转换为某种有损压缩或不兼容的颜色宽度。
  • 好的,感谢您抽出时间给我解答,希望您有美好的一天!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多