Android 2.2问题上的Bitmap.createBitmap()

Dam*_*mir 2 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.
关于这个问题的任何线索?

Dam*_*mir 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)