Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中从图像中获取RGB颜色_Java_Android_Colors_Rgb - Fatal编程技术网

Java 在Android中从图像中获取RGB颜色

Java 在Android中从图像中获取RGB颜色,java,android,colors,rgb,Java,Android,Colors,Rgb,我正在制作一个游戏,在游戏中我使用一个图像加载地图。 我检查每个像素的RGB,这取决于我添加的对象。 这是我的代码: private void loadLevel() { Bitmap image = Assets.loadLevel(LEVEL); int w = image.getWidth(); int h = image.getHeight(); for (int xx = 0; xx < h; xx++) { for

我正在制作一个游戏,在游戏中我使用一个图像加载地图。 我检查每个像素的RGB,这取决于我添加的对象。 这是我的代码:

        private void loadLevel() {
    Bitmap image = Assets.loadLevel(LEVEL);
    int w = image.getWidth();
    int h = image.getHeight();
    for (int xx = 0; xx < h; xx++) {
        for (int yy = 0; yy < w; yy++) {
            int pixel = image.getPixel(xx, yy);
            int red = (pixel >> 16) & 0xff;
            int green = (pixel >> 8) & 0xff;
            int blue = (pixel) & 0xff;

            if (red == 100 && green == 60 && blue == 0) { // / block
                Log.d("PlayState","Creating blockss!!!");
                addObject(new Block(xx * 32, yy * 32, 0, ObjectId.Block));

            }
            if (red == 100 && green == 50 && blue == 0) { // /block 1
                addObject(new Block(xx * 32, yy * 32, 1, ObjectId.Block));
            }
            if (red == 100 && green == 40 && blue == 0) { // /block 2
                addObject(new Block(xx * 32, yy * 32, 2, ObjectId.Block));
            }
            if (red == 100 && green == 30 && blue == 0) { // /block 3
                addObject(new Block(xx * 32, yy * 32, 3, ObjectId.Block));
            }
            if (red == 255 && green == 255 && blue == 255) { // /block 4
                addObject(new Block(xx * 32, yy * 32, 4, ObjectId.Block));
            }
            if (red == 255 && green == 255 && blue == 245) { // /block 5
                addObject(new Block(xx * 32, yy * 32, 7, ObjectId.Block));
            }
            if (red == 0 && green == 255 && blue == 33) { // /block up
                addObject(new Block(xx * 32, yy * 32, 5, ObjectId.Block));
            }
            if (red == 0 && green == 245 && blue == 33) { // /block up1
                addObject(new Block(xx * 32, yy * 32, 6, ObjectId.Block));
            }
            if (red == 0 && green == 0 && blue == 255) { // / player
                Log.d("PlayState","Creating Playerrr!!!");
                addObject(new Player(xx * 32, yy * 32, ObjectId.Player));

            }
        }
    }

}
同样的结果

编辑:

如果其他人有这个问题,多亏了@JASONGPETERSON,我找到了解决办法。 例如,与其寻找精确的值,不如检查它是低一点还是高一点

if ((red > 90 && red < 110) && (green > 50 && green < 70) && blue == 0) { // / block
                Log.d("PlayState","Creating blockss!!!");
                addObject(new Block(xx * 32, yy * 32, 0, ObjectId.Block));

            }

您是否尝试记录.d红色、绿色和蓝色值,以查看其是否与观察到的情况相同?

可能无法解决您的问题,但:

int pixel = image.getPixel(xx, yy);
建议您使用xx作为x坐标宽度,但您使用的是图像的高度:

int h = image.getHeight();
for (int xx = 0; xx < h; xx++)

也许您的条件需要测试一个狭窄的范围,而不是一个精确的整数。由于getPixel方法、图像压缩等原因,可能会有一些舍入。事实上,这是可行的。

请注意,也许您的条件需要测试一个窄范围,而不是精确的整数。由于getPixel方法、图像压缩等原因,可能会出现一些舍入现象。@JpCrow我看了一下,但没有解决我的问题。@JASONGPETERSON好主意,我会试试!thanks@JASONGPETERSON是的,你说得对!!!当我检查颜色是否低于或高于10时,它起作用了。非常感谢:我没有注意到这一点,但这并不重要,因为最终它会检查所有像素,因此它会给出相同的结果。
int h = image.getHeight();
for (int xx = 0; xx < h; xx++)