Ale*_*aro 0 memory android bitmap
我试图找到一种Bitmap
从包含任意大图像的文件加载a的有效方法,在其上放置水印(徽标),并将其保存回文件.
我知道在Android上处理大型位图时会出现内存问题.我不想加载较小的图像样本,因为在将其保存回文件时我需要保持相同的质量.
任何帮助表示赞赏.
在解码大图片时,使用BitmapFactory.decodeFile(File)会导致OutOfMemory问题
OutOfMemoryError
因为没有足够大的堆空间块来满足您的请求.Dalvik垃圾收集器是一个非压缩收集器,因此堆将被分割成许多较小的内存块.
如果所有图片的分辨率相同,且您的分辨率minSdkVersion
为11或更高,则Bitmap
在您的过程启动时(例如,在onCreate()
自定义Application
类中)为其分配,并将其inBitmap
用于您的BitmapFactory.Options
.Bitmap
如果映像可以首先放入堆中,那么在堆碎片化之前,您的分配尝试应尽早成功.
如果它们不是全部都是相同的分辨率,但你知道最大分辨率,而你的分辨率minSdkVersion
是19或更高,那么就像我上面描述的那样做.Android 4.4扩展inBitmap
为支持Bitmap
与您正在加载的图像相同或更大的尺寸,而在它必须与尺寸完全匹配之前.
如果这些都不可能:
用于android:largeHeap="true"
在API Level 11+设备上获得更大的堆,或
将图像处理逻辑移动到NDK,因为本机内存分配不计入Dalvik堆限制,或
将图像处理逻辑移动到专用的短期过程,这样您就可以在需要处理特定图像时获得一个干净的单独堆
后三个选项在应用程序的系统RAM消耗和其他效果方面给用户带来了成本.