通常、AndroidでJpegなどの画像を表示する場合
//画像ファイルをBitmapに展開 Bitmap bmp=BitmapFactory.decodeFile(filename); |
としますが大きすぎる画像の場合、OutOfMemoryのエラーが出ることがあります。
OutOfMemoryを出さないようにするため、
//BitmapFactoryオプション BitmapFactory.Options opt = new BitmapFactory.Options(); //画像をメモリに展開しないで情報だけ取る opt.inJustDecodeBounds=true; BitmapFactory.decodeFile(filename,opt); //画面サイズぐらいのサイズにリサイズして展開 int scale1=getWindowManager().getDefaultDisplay().getHeight()/opt.outHeight; int scale2=getWindowManager().getDefaultDisplay().getWidth()/opt.outWidth; opt.inSampleSize=Math.min(scale1,scale2); opt.inJustDecodeBounds=false; Bitmap bmp=BitmapFactory.decodeFile(filename,opt); |
のようにするとOutOfMemoryを発生しないように出来ますが画質は悪いです。
リサイズする大きさをなるべく大きくしてmatrixのpostScale()を使ってリサイズも画質は良くなりませんでした。
私の試した範囲では、なるべく大きめにBitmapを展開しImageViewに貼り付けてImageViewにリサイズをさせるのが一番綺麗に縮小されるようです。
com.sun.image.codec.jpeg.JPEGImageDecoderやjavax.imageioあたりにJpegからリサイズした綺麗なBitmapをそのまま吐いてくれるようなメソッドがあればいいのですがまだ調べていません。
どなたか解決なさった方、コメントにて教えて頂けるとありがたいです。