8

Androidアプリを作成していますが、画像(ビットマップ)をcavasにロードし、「ピンチズーム」ジェスチャを使用してサイズを変更する必要があります。ただし、画像が特定のサイズを超えると、アプリケーションがクラッシュします(OutOfMemory例外)。画像の読み込みと操作を最適化するにはどうすればよいですか?

私が使用する画像をロードするには:

BitmapFactory.decodeResource (ctx.getResources (), R.drawable.image)

それを描くには:

imgCanvas.drawBitmap (image, posX, posY, null), 

サイズを変更するには:

Bitmap.createScaledBitmap (originalBitmap, neww, NEWH, true);
4

1 に答える 1

4

これは些細なことではありません。

画像の現在の縮尺と画像の現在表示されている部分に基づいて、適切な解像度でその画像の一部のみを読み込みます:
https ://developer.android.com/reference/android/graphics/BitmapRegionDecoder.html

ズームアウトして画像全体を縮小して表示する場合は、このBitmapRegionDecoderクラスのメソッドを使用してBitmapFactory.Optionsパラメーターを取得しinSampleSize、1より大きい値(できれば2の累乗の値)に設定し
ます。https:// developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize

ズームインするときは、最初にすでに表示されている低解像度(inSampleSize> 1の値を使用した場合)をズームインし、を使用して高解像度バージョン(inSampleSize以前に使用した値よりも小さい)を遅延ロードし、高解像度BitmapRegionDecoderでフェードインします。徐々に解像度バージョン。

ユーザーがズームインしたら、1になるまでこれを続けますinSampleSize

于 2013-03-10T15:48:56.837 に答える