BitmapFactory.decodeFile(path、options)でSDカードから画像をデコードしたい。
また、2048x2048ピクセルより大きい画像を最大2048x2048に縮小したい(比率を維持)。
ビットマップを取得した後、これを手動で実行できますが、そのためには、すでに割り当てられているバイトに加えて、大量のバイトを割り当てる必要があります。
その効果を得るには、BitmapFactory.Optionsオブジェクトをどのように設定すればよいですか?
ありがとう
最初に画像をロードするときに BitmapFactory.Options.inSampleSize を使用して、可能な限りターゲットサイズに近いサイズを取得し、次にBitmap.createScaledBitmap
を使用して希望する正確なサイズにスケーリングします。
this answer にこのためのコードがいくつかあります。
inJustDecodeBounds
でtrue
をOptions
に設定することから始めます。これにより、画像データをロードせずに画像のサイズを取得できます。
画像サイズが最大サイズよりも小さい場合は、通常どおりにロードします。
一方、大きすぎる場合は、 inSampleSize
を使用して小さなビットマップを読み取ります。
注:inSampleSizeを使用すると、デコードでフィルタリングが行われないため、詳細が失われる可能性がありますが、画像サイズが大きい(2048ピクセル)これで問題が発生することはないと思います。
あなたはこのようなことを試すことができます:
int imageWidth, imageHeight;
Bitmap result = Bitmap.createScaledBitmap(bitmapPicture,
imageWidth, imageHeight, false);
ここで、独自の幅と高さを追加できます。 bitmapPicture
はBitmap
のオブジェクトです。これがあなたの助けになるかどうか私に知らせてください。