0

inSampleSizeOutOfMemoryのジレンマに関する多くの議論を読みました。
良い解決策が得られないので、質問します。
現在、inSampleSize=4のビットマップを読み込んでいます。
サイズが648x388のビットマップが表示されます。
元のディスク上のサイズは2592x1592です。

648x388ビットマップにテキストを書き込んでディスクに保存しています。
2592x1592がOutOfMemoryを与えるので、私は648x388に書いています。

whileそれが機能する方法は、ループに保存される1〜10個の648x388ビットマップが存在する可能性があるということです。
このループを変更して、1-102592x1592ビットマップを保存したいと思います。

2592x1592を安全にロードするにはどうすればよいですか?
解像度が60%以上下がることは気になりません。
ビットマップのサイズが2592x1592と同じである限り。
サイズを維持しながらビットマップを薄くして、
品質を低下させることなく色を削除する方法はありますか?

私の最初の考えは、私が得ることができる最大のビットマップを取得するためにこのようなことをすることでした:私はこれをテストしていませんが、それは悪い方法だと感じています

boolean work = true;
int insample = 2;
BitmapFactory.Options options = new BitmapFactory.Options();
while(work){
    try{
    options.inSampleSize = insample;
        bitmap = BitmapFactory.decodeFile(filePath,options);
        work = false;
    }catch(Exception e){
        insample++;
    }
}

どんな助けでもありがたいです。

4

2 に答える 2

1

画像処理には多くのメモリが必要です。ビットマップ全体を使用することはできず、携帯電話で変更するだけです。そのためにWebサービスを使用します。アップロード、処理、ダウンロード。申し訳ありませんが、デコードされたビットマップが大量のメモリを消費する方法は他にありません。

ちなみに、outOFMemory 例外をキャッチすることはできません。アプリがクラッシュするだけです。

于 2011-06-16T18:05:13.223 に答える
1

Android のプロセス サイズには厳しい制限があり、1 ピクセルあたり 4 バイトの 4 メガピクセルの画像は、(多くのデバイスで) 単独でヒットし、プログラムの余地がありません。

サーバー上/クラウド内で画像処理を行う Web サービスを作成します。または、ビットマップを使用する代わりにデータを直接操作して、画像処理を「オンザフライ」で行う方法を学びます。

于 2011-06-16T18:06:39.143 に答える