1

我有带有文本的大型可缩放位图,我想稍微调整一下大小。最简单的方法是使用 inSampleSize,但它的最小值是 2,这是不可接受的(将图像大小调整为一半基本上会使文本不可读)。

createScaledBitmap 工作正常,但是由于 Android 对位图的垃圾收集速度很慢,我有时会在它后面的方法中遇到 OutOfMemory(我在解码后调用 createBitmap)。

所以,我想知道有没有办法减少位图的大小而不是一半并且没有内存问题?

4

1 回答 1

3

欢迎来到我的私人地狱...

我正在使用 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);
}
于 2011-07-12T13:48:35.387 回答