0

私のアプリケーションでは、高解像度の例(1500 * 1500)で画像をロードする必要があります。touchimageviewライブラリを使用して、移動、ダブルタップズーム、ピンチズーム機能を実現しています。ローカル リソース BitmapFactory.decodeFileDescriptor() からイメージをロードするときに、メモリ不足の例外がスローされます。

ウェブを検索したところ、画像をサブサンプリングして画像ビューにロードする必要があることがわかりました。しかし、画像をズームしている間はピクセル化されているように見えるため、サブサンプルはしたくありません。メモリ不足の例外なしに画像をロードする方法はありますか?ズーム機能でも機能するはずです。

4

1 に答える 1

0

このメソッドをチェックする画像のサイズを変更する必要があります

public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
    int reqWidth, int reqHeight) {

// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, resId, options);

// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(res, resId, options);
}


 public static int calculateInSampleSize(
        BitmapFactory.Options options, int reqWidth, int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;

if (height > reqHeight || width > reqWidth) {

    // Calculate ratios of height and width to requested height and width
    final int heightRatio = Math.round((float) height / (float) reqHeight);
    final int widthRatio = Math.round((float) width / (float) reqWidth);

    // Choose the smallest ratio as inSampleSize value, this will guarantee
    // a final image with both dimensions larger than or equal to the
    // requested height and width.
    inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}

return inSampleSize;
}
于 2015-03-11T12:56:16.760 に答える