我有带有文本的大型可缩放位图,我想稍微调整一下大小。最简单的方法是使用 inSampleSize,但它的最小值是 2,这是不可接受的(将图像大小调整为一半基本上会使文本不可读)。
createScaledBitmap 工作正常,但是由于 Android 对位图的垃圾收集速度很慢,我有时会在它后面的方法中遇到 OutOfMemory(我在解码后调用 createBitmap)。
所以,我想知道有没有办法减少位图的大小而不是一半并且没有内存问题?
我有带有文本的大型可缩放位图,我想稍微调整一下大小。最简单的方法是使用 inSampleSize,但它的最小值是 2,这是不可接受的(将图像大小调整为一半基本上会使文本不可读)。
createScaledBitmap 工作正常,但是由于 Android 对位图的垃圾收集速度很慢,我有时会在它后面的方法中遇到 OutOfMemory(我在解码后调用 createBitmap)。
所以,我想知道有没有办法减少位图的大小而不是一半并且没有内存问题?
欢迎来到我的私人地狱...
我正在使用 2 个位图,一个是原始的缩放版本,它被缩放以适应屏幕。当我想放大以使文本更易读时,我切换到将用于缩放的原始位图。
我对大型位图的所有经验都导致了一个解决方案:自己处理位图的完整生命周期。不要只是将位图引用设置为 null,在释放引用之前回收它。还可以在那里捕获可能的 OOME 和释放内存。清理所有内容并再次尝试最后一次位图解码。
我有多个这样的电话:
try {
try {
mBitmap = BitmapFactory.decodeFile(uri, mOptions);
}
catch (OutOfMemoryError e) {
freeMemory();
// retry
mBitmap = BitmapFactory.decodeFile(uri, mOptions);
}
}
catch (OutOfMemoryError e) {
Log.e("THREAD", "FATAL OOME ..." + mPageNumber, e);
}