読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

Androidで大きい画像を効果的に読み込む

Android

概要

AndroidでOutOfMemoryにならないように、効果的に大きい画像を読み込む方法を考える

詳細

大きい画像を読み込むときにOutOfMemoryになることが多い
そのため、BitmapFactory.Optionsを使い、画像をメモリに展開する前に情報を受け取る
そして、画像サイズを縮小し、読みこむように仕込む

int scale = 1; 

// 画像情報だけを取得するように修正
options.inJustDecodeBounds = true;

for(int i = 0; i < 3; i++){
	try{
		final BitmapFactory.Options opts = BitmapFactory.Options();
		// 画像の縮小率
		opts.inSampleSize = scale + i;
		// 画像のdpi
		opts.inDensity = metrics.densityDpi;
		// 画像の品質
		opts.inPreferredConfig = Config.ARGB_8888;
		// 画像の情報読み込み直し
		Bitmap bitmap = BitmapFactory.decodeFile(uri.getPath, opts);
		break;
	}catch(OutOfMemoryError e) {
		continue;
	}
}

参考

Loading Large Bitmaps Efficiently | Android Developers
Y.A.M の 雑記帳: Android 大きい画像を効果的に読み込む
BitmapFactory.Options | Android Developers

良いAndroidアプリを作る139の鉄則

良いAndroidアプリを作る139の鉄則