我遇到Bitmap.copy函数问题。这段代码没问题,
Bitmap tempBM = Bitmap.createScaledBitmap(sourceBitmap, sourceBitmap.getWidth(), sourceBitmap.getHeight(), false);
//Ensure that the bitmap is mutable and not copied from the original in the case where no scaling is required
m_bwBitmap = tempBM.copy(tempBM.getConfig(), true);
if (tempBM!=sourceBitmap)
{
tempBM.recycle();
}
但这不是......
m_bwBitmap = sourceBitmap.copy(sourceBitmap.getConfig(), true);
sourceBitmap以不可变的方式启动,我希望m_bwBitmap是可变的。
它不会崩溃,但它确实打破了调试器,好像某个地方的android函数出错了。然后应用程序崩溃。如果我用顶部代码替换它,一切正常。
但是,我现在开始从JellyBean获取崩溃报告,在其上的tempBM.copy行上抛出空指针异常。所以,我必须对此进行排序,但目前顶级代码是唯一可以使用的源代码。我正在Android 4.0设备上测试它。
有什么想法吗?
答案 0 :(得分:1)
好的,我想我已经回答了这个问题(至少在一半之内)。
这与Bitmap.Config有关。如果我将行更改为
m_bwBitmap = sourceBitmap.copy(Bitmap.Config.ARGB_8888, true);
然后它运作正常。
注意,原始源位图来自这样的一行......
Bitmap sourceBitmap = BitmapFactory.decodeFile(pictureFile);
pictureFile是一个GIF。
但是,我真的不知道为什么decodeFile会产生看似无效的Config。如果我检查sourceBitmap的配置,它会返回null?!?