Android 2.2问题上的Bitmap.createBitmap()

时间:2010-08-13 10:31:10

标签: android

我已经使用Android 2.2在HTC Desire上测试了我的游戏。游戏是2D,具有多个位图图像(帧)的自定义精灵。使用方法Bitmap.createBitmap()从一个较大的图像生成帧:

bitmapFrames[currentFrame][0] = Bitmap.createBitmap(image, startX, startY, width, height, matrix, true);

在Android 1.5和1.6设备上运行正常。它也适用于所有仿真器(1.5,1.6,2.1和2.2),但在真正的HTC Desire设备上,所有的精灵帧都被绘制出来。看起来上面提到的方法在创建位图帧时忽略参数startX,startY,width,height。 有关这个问题的任何线索吗?

1 个答案:

答案 0 :(得分:6)

好的,我找到了解决这个问题的方法。让我解释一下问题出现的地方: 我注意到我的瓷砖与sprite没有相同的问题,即使它们是以相同的方式创建的。这是因为对于平铺图像我没有使用透明度。结论是:
如果您使用的是实心位图图像 bmpImage.getConfig() == Config.RGB_565
那么上面提到的方法工作正常。但是,如果你使用透明度 bmpImage.getConfig() == Config.ARGB_8888
然后方法
Bitmap.createBitmap(image, startX, startY, width, height, matrix, true);
总是返回整个位图图像而不是一个部分。此问题仅存在于Android 2.2真实设备上。

解决方案:
我手动复制源图像中的颜色值,并使用以下方法使用int []颜色值的部分创建帧:

  • Bitmap.getPixels()

  • System.arraycopy()

  • Bitmap.createBitmap(int[] colors, int width, int height, Bitmap.Config config)