我正在尝试制作一个非常简单的磁贴引擎。但是,使用Bitmap.getpixel(x,y)
并不总是正确匹配颜色。它似乎与0xFFFFFFFF
,0xFF000000
,0xFF189600
和0xFF18FF00
一样正常,但0xFF186600
存在问题。我尝试将其更改为多种不同的相似颜色,但它似乎仍然无法正确读取。我正在与一个简单的switch语句进行比较。这是我方法的代码
public void LoadLevel(Canvas canvas, int levelName)
{
Bitmap level = BitmapFactory.decodeResource(getResources(), levelName);
Bitmap startTile = BitmapFactory.decodeResource(getResources(), R.drawable.starttile);
canvas.drawColor(Color.WHITE);
int drawX = 0;
int drawY = 0;
for(int y = 0; y < level.getHeight(); y++)
{
for(int x = 0; x < level.getWidth(); x++)
{
switch(level.getPixel(x, y))
{
case 0xFF000000: break;
case 0xFFFFFFFF:
canvas.drawBitmap(startTile, drawX, drawY, null);
break;
case 0xFF189600:
canvas.drawBitmap(startTile, drawX, drawY, null);
break;
case 0xFF18FF00:
canvas.drawBitmap(startTile, drawX, drawY, null);
break;
case 0xFF186600:
canvas.drawBitmap(startTile, drawX, drawY, null);
break;
}
Log.d("Color", Integer.toString(level.getPixel(x, y)));
drawX += 128;
}
drawX = 0;
drawY += 128;
}
}
根据日志,颜色为“-15177472”。我不确定实际上是什么颜色......所以我不确定-15177472 == 0xFF186600
我做错了什么不能得到像素? android正在改变图像吗?我想使用安全的颜色吗?
答案 0 :(得分:0)
-15177472
是0xFF186900
。请注意9
数字,而不是您要查找的6
。
您从哪里获得这些预期值,以及如何加载位图?如果您在绘图程序中创建位图,然后将它们加载到Android应用程序中,您可能会发现它们被解压缩为16bpp,在这种情况下,将像素值转换回32bpp时,会有一些精度损失{ {1}}。