0

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

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

BitmapFactory.decodeResource()

然后用

bitmap.getPixels()

没有崩溃,一切都按预期工作。但是,如果我从文件系统加载相同的图像

BitmapFactory.decodeFile()

然后用

bitmap.getPixels()

并放弃它,本机库崩溃。

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

4

1 回答 1

0

阅读 Android 源代码 有一个有趣的区别:decodeFile如果传递的文件是资产,则该方法可能会调用不同的本地位图解码器,而不decodeResource会这样做。

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

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

于 2012-12-08T20:20:53.903 回答