Java 在Android中从图像中获取RGB颜色
我正在制作一个游戏,在游戏中我使用一个图像加载地图。 我检查每个像素的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
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++)