androidでイメージファイルを探し出し選択しUriを入手したのですが、bitmapにする前に画像解像度を得る

486 views
Skip to first unread message

(´・ω・`)にっくにく

unread,
Apr 25, 2011, 2:12:23 PM4/25/11
to 日本Androidの会
表題の通りなのですが、

androidでイメージファイルを探しUriを得たのですが、
Bitmapに展開すると確実に落ちる画像ファイルがあります。メモリーが足りずにアプリが落ちてしまうようです。
原因は読み出す画像ファイルの縦横解像度が大きくBitmapオブジェクトに展開するとその作業に対しメモリーが足りないといって落ちてしまいます。

ファイルの容量で区別しようかと思ったのですが、容量が問題なのでなく、
画像ファイルの解像度によって、起こる問題のようなのですが。。
Bitmapにする以前にUriからそのファイルの縦横ピクセル値を得ることができるのでしょうか?

たろサ

unread,
Apr 25, 2011, 2:18:55 PM4/25/11
to android-g...@googlegroups.com
 たろサです。

BitmapFactory.Options bmpOp = new BitmapFactory.Options();
//画像をメモリに展開しないフラグ
bmpOp.inJustDecodeBounds = true;
//画像情報だけデコード
BitmapFactory.decodeFile( toFile, bmpOp );

 inJustDecodeBoundsをtrueにして読み込めば、画像のデータだけ取得できますよ。
bmpOp.outWidthとか、bmpOp.outHeightとか。

 ではでは。

--
山本三七男 (Minao Yamamoto) ---------------- ハンドル:たろサ -----
E-Mail: taro...@gmail.com

(´・ω・`)にっくにく

unread,
May 6, 2011, 9:07:17 AM5/6/11
to 日本Androidの会
ありがとうございます。実は自前でここに記入したあと解決したのですが、やりかたは教えていただいた形でやりました。

コピペで他人が使えるようにメソッド残しておきます。

こんな感じで
private Bitmap getBitmapFromUri(Uri imageUri) {

// 読み込み計算用ローカル変数
int gaso = 0;
int urningGaso = 4000000;
float scale = 1f;
Bitmap resizeBMP = null;
ContentResolver cr = getContentResolver();
String[] columns = { MediaStore.Images.Media.DATA };
Cursor c = cr.query(imageUri, columns, null, null, null);
// pathを取得
c.moveToFirst();
String src = c.getString(0);
// 読み込み用のオプションオブジェクトを生成
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(src, options);
int scaleW = options.outWidth;
int scaleH = options.outHeight;
if ((gaso = scaleW * scaleH) > urningGaso) {
scale = (float) gaso / (float) urningGaso + 1f;
}
options.inJustDecodeBounds = false;
options.inSampleSize = (int) scale;

resizeBMP = BitmapFactory.decodeFile(src, options);
if (scale > 1f) {
toastAlert("画像が大きいので縮小されました。", 4);
}

return resizeBMP;
> E-Mail: taros...@gmail.com

(´・ω・`)にっくにく

unread,
May 6, 2011, 9:09:13 AM5/6/11
to 日本Androidの会
ありがとうございます
実は記入直後に自分で調べて同様の解決法を発見しました。
他の人がコピペで利用できるように作ったメソッド残しておきます。

こんな感じにしました。
> E-Mail: taros...@gmail.com
Reply all
Reply to author
Forward
0 new messages