我正在尝试使用 BitmapRegionDecoder 和 APK 扩展 Zip 库从 OBB 文件中读取位图,如下所示。
ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(cont,1, 1);
AssetFileDescriptor assetFileDescriptor = expansionFile.getAssetFileDescriptor(id);
FileDescriptor fileDescriptor = assetFileDescriptor.getFileDescriptor();
BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(fileDescriptor, false);
令我惊讶的是,BitmapRegionDecoder 抛出了 IOException,我不知道为什么。如下使用 InputStream 时,BitmapRegionDecoder 读取请求的位图区域没有问题。
InputStream fileStream = expansionFile.getInputStream(id);
BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(fileStream, false);
我宁愿不使用 InputStream,因为我必须平铺一个非常大的图像,因此必须为每个平铺创建一个新流(因为我不知道如何“倒带”)。这似乎经常调用垃圾收集。目前我最好的解决方案是解压缩文件,然后从那里读取它们。但这会使设备上的数据大小翻倍。
有没有人成功使用带有 OBB 文件的 BitmapRegionDecoder ?