大きな画像を地図として使用する必要があるプロジェクトに取り組んでいます。画像は約 95MB で、解像度は 12100 x 8000 ピクセルです。
一度に画像全体が必要なわけではなく、1000 x 1000 ピクセルの詳細が必要なだけです (常に同じ詳細であるとは限りません。同じ部分をつかむだけでは使用できるソリューションではありません)。だから私はそれを単にサンプリングすることはできませんBitmapOptions
.
私は周りを見回して、FileInputStream
(画像はSDカードにあります)を作成するというアイデアを見つけましたdecodeStream(InputStream is, Rect outPadding, BitmapFactory.Options opts)
. そうすれば、すべてをメモリにロードしません。試してみましたが、画像を読み込もうとするとクラッシュします。これが私のコードです:
FileInputStream stream = null;
try {
stream = new FileInputStream(path);
} catch(Exception e) {
Log.e("inputstream",e.toString());
}
Rect rect = new Rect(a,b,c,d);
return BitmapFactory.decodeStream(stream, rect, null);
画像を読み込もうとすると、アクティビティが終了し、LogCat が教えてくれjava.lang.outOfMemoryError
ます。なぜクラッシュするのですか?ストリームでは「オンザフライ」で画像で動作するはずだと思いましたが、エラーについて私が持っている唯一の説明は、穴の画像をメモリにロードしようとすることです。画像から詳細をロードする方法、またはこのアイデアがうまくいかない理由を誰か知っていますか?