画像のoomについて
1810 ワード
画像のoomについて
oom(out of memory)は、その名の通りメモリオーバーフローで、一般的に大きな画像をロードするときに遭遇しますが、最近cameraを作ると、oomの問題も発生します.ここでは比較的良い圧縮方法をお勧めします.
oom(out of memory)は、その名の通りメモリオーバーフローで、一般的に大きな画像をロードするときに遭遇しますが、最近cameraを作ると、oomの問題も発生します.ここでは比較的良い圧縮方法をお勧めします.
public static Bitmap revitionImageSize(Bitmap image)throws IOException
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
BitmapFactory.Options newOpts = new BitmapFactory.Options();
// true, bitmap , ( )
newOpts.inJustDecodeBounds = true;
BitmapFactory.decodeStream(isBm, null, newOpts);
isBm.close();
int i = 1;
Bitmap bitmap = null;
while (true) {
// ,
int w =newOpts.outWidth;
int h = newOpts.outHeight;
if ((newOpts.outWidth >> i <= image.getWidth())
&& (newOpts.outHeight >> i <= image.getHeight())) {
// , : , !
isBm = new ByteArrayInputStream(baos.toByteArray());
// 。
int x =(int) Math.pow(2.0D, i);
newOpts.inSampleSize = (int) Math.pow(2.0D, i);
// true, false,
newOpts.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
break;
}
i += 1;
}
return bitmap;
}
私はここで1倍圧縮して、具体的にどのくらい圧縮して、自分で設定することができて、inSampleSizeはあなたが最後に倍数を圧縮する値です.プロジェクトで使ったので、ここに記録しておきます!