3

我遇到了 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 设备上对其进行测试。

有任何想法吗?

4

1 回答 1

1

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

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

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

然后它工作正常。

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

Bitmap sourceBitmap = BitmapFactory.decodeFile(pictureFile);

图片文件是一个 GIF。

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

于 2012-11-06T23:11:38.290 回答