Android:BitmapFactory.decodeResource()和BitmapFactory.decodeFile()结果之间的区别?

时间:2012-12-08 20:00:16

标签: android image-processing bitmap

当我向其传递从bitmap.getPixels()返回的像素数据时,我注意到崩溃(在外部本机库中执行某些图像处理)。

如果我将图像打包在应用程序中,则在drawables文件夹中并使用

加载位图
BitmapFactory.decodeResource()

然后用

抓取像素数据
bitmap.getPixels()

没有崩溃,一切都按预期工作。但是,如果我使用

从文件系统加载相同的图像
BitmapFactory.decodeFile()

然后用

抓住像素
bitmap.getPixels()

并将其关闭,本机lib崩溃。

这两个调用将图像处理成位图的方式有区别吗?

1 个答案:

答案 0 :(得分:0)

阅读Android资源有一个有趣的差异:如果传递的文件是资产,decodeFile方法可能会调用不同的本机位图解码器,而decodeResource将永远不会这样做。

if (is instanceof AssetManager.AssetInputStream) {
            bm = nativeDecodeAsset(((AssetManager.AssetInputStream) is).getAssetInt(),
                    outPadding, opts);

但是,崩溃很可能是您的本机代码中的错误。使用错误的指针和/或缓冲区溢出来混乱堆栈帧通常会导致像这样的奇怪崩溃。尝试检查崩溃前运行的所有本机代码,看看是否可以发现任何类似的内存问题。