1

テキスト付きの大きなズーム可能なビットマップがあり、少しサイズを変更したいと思います。最も簡単な方法はinSampleSizeを使用することですが、それが機能するための最小値は2です。これは受け入れられません(画像のサイズを半分にすると、基本的にテキストが読めなくなります)。

createScaledBitmapは問題なく動作しますが、Androidのビットマップのガベージコレクションが遅いため、それに続くメソッドでOutOfMemoryを実行することがあります(デコード後にcreateBitmapを呼び出しています)。

それで、ビットマップのサイズを半分にせず、メモリの問題なしに減らす方法があるのだろうか?

4

1 に答える 1

3

私の個人的な地獄へようこそ...

私は2つのビットマップを使用しています。1つは、画面に収まるようにスケーリングされたオリジナルのスケーリングされたバージョンです。テキストを読みやすくするためにズームインしたい場合は、ズームに使用される元のビットマップに切り替えます。

巨大なビットマップに関する私の経験はすべて、1つの解決策につながります。ビットマップのライフサイクル全体を自分で処理することです。ビットマップ参照を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 に答える