Bitmap.copy在createScaledBitmap工作的地方失败

时间:2012-11-06 22:42:29

标签: android bitmap crash copy

我遇到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设备上测试它。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

好的,我想我已经回答了这个问题(至少在一半之内)。

这与Bitmap.Config有关。如果我将行更改为

m_bwBitmap = sourceBitmap.copy(Bitmap.Config.ARGB_8888, true);

然后它运作正常。

注意,原始源位图来自这样的一行......

Bitmap sourceBitmap = BitmapFactory.decodeFile(pictureFile);

pictureFile是一个GIF。

但是,我真的不知道为什么decodeFile会产生看似无效的Config。如果我检查sourceBitmap的配置,它会返回null?!?