当我向其传递从bitmap.getPixels()返回的像素数据时,我注意到崩溃(在外部本机库中执行某些图像处理)。
如果我将图像打包在应用程序中,则在drawables文件夹中并使用
加载位图BitmapFactory.decodeResource()
然后用
抓取像素数据bitmap.getPixels()
没有崩溃,一切都按预期工作。但是,如果我使用
从文件系统加载相同的图像BitmapFactory.decodeFile()
然后用
抓住像素bitmap.getPixels()
并将其关闭,本机lib崩溃。
这两个调用将图像处理成位图的方式有区别吗?
答案 0 :(得分:0)
阅读Android资源有一个有趣的差异:如果传递的文件是资产,decodeFile
方法可能会调用不同的本机位图解码器,而decodeResource
将永远不会这样做。
if (is instanceof AssetManager.AssetInputStream) {
bm = nativeDecodeAsset(((AssetManager.AssetInputStream) is).getAssetInt(),
outPadding, opts);
但是,崩溃很可能是您的本机代码中的错误。使用错误的指针和/或缓冲区溢出来混乱堆栈帧通常会导致像这样的奇怪崩溃。尝试检查崩溃前运行的所有本机代码,看看是否可以发现任何类似的内存问题。