来自Bitmap的Android getPixel随机开始返回黑色

时间:2012-09-14 16:29:06

标签: android bitmap opengl-es-2.0 getpixel

我正在使用opengl es 2.0为Android开发游戏,我使用高度图位图来创建地形。这没问题。

在游戏过程中,我有一些代表游戏中实体的类,它们在他们的实例中存储它们的(x,y)位置。 为了获得z值,我使用查询高度图位图的方法。

这是方法:

public float zAt(float pos[]){
    float xPos = pos[0] + terrainWidth/2;
    float yPos = height-(pos[1] + terrainHeight/2);

    int bitMapWidth = zMap.getWidth();
    int bitMapHeight = zMap.getHeight();

    int pixelX= (int) (((bitMapWidth-1)  * xPos) / terrainWidth);
    int pixelY = (int) (((bitMapHeight-1) * yPos) / terrainHeight);

    if(pixelX < 0 || pixelX >= bitMapWidth || pixelY < 0 || pixelY >= bitMapHeight)
        return 0;
    else{
        System.out.println("DEBUG! >> "+"("+pixelX+","+pixelY+"):"+zMap.getPixel(pixelX, pixelY)+" <<");
        float toReturn = ((zMap.getPixel(pixelX, pixelY) & 0xFF)-(255f/2f))/zDiv;

        return toReturn;
    }
}

比赛开始时,一切都很好。但是在一些游戏循环之后,我注意到我在游戏中的对象总是保持在z = 0。我去检查zAt方法,把那个println扔进那里,事实证明,经过一段时间(每次运行游戏时这个时间不同),zMap.getPixel开始返回0。

这是一个奇怪的问题,因为我在游戏过程中没有改变我的位图。

有时它甚至会闪烁一点,即getPixel返回0,然后返回正确的值,然后再次返回0 ...大部分时间总是返回0.

这是我加载位图的方法:

    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inScaled = false;

    Bitmap terrainBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.heightmap, options);

有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

如果pixelX或pixelY值大于位图的相应尺寸,则返回0。在进入此代码段之前验证pixelX和pixelY值:

if(pixelX < 0 || pixelX >= bitMapWidth || pixelY < 0 || pixelY >= bitMapHeight)
    return 0;