티스토리 뷰

Development

[Android] Bitmap Safety DecodeFile

devbible 2013. 1. 20. 22:55

안드로이드에서 이미지파일을 들고오는 방법은 여러가지지만 다음과같은 방법으로 가져올 수 있다.



 Bitmap mMyBitmap = BitmapFactory.decodeFile(imageFilePath);




하지만 이미지파일이 클경우 위에 코드 한줄만 쓰더라도 OutOfMemoryError 를 내뱉을 수 있다.
그래서 쉽게 쓸 수 있는방법이 sampleSize로 원본이미지를 줄여서 가져오는 방법이 있지만. 
이는 작은이미지까지도 줄여서 가져와버리는 문제가 있다.

다음은 이미지가 크더라도 오류없이 정상적으로 가져올 수 있는 여러방법 중 하나이다.

String imageFilePath = "이미지파일 경로";
int mOversize = 1000; 

BitmapFactory.Options options = new BitmapFactory.Options();

options.inJustDecodeBounds = true;

BitmapFactory.decodeFile(imageFilePath, options);

options.inJustDecodeBounds = false;


if(Math.max(options.outWidth, options.outHeight) > mOversize)

 options.inSampleSize = 2;

else

 options.inSampleSize = 1;


mMyBitmap = BitmapFactory.decodeFile(_imageFilePath, options);

 



options.inJustDecodeBounds = true; 을 적용 후 decode 하게되면 Bitmap 은 null로 return 되지만 pixel 정보는 가져온다.

그 pixel 사이즈만큼 sampleSize를 지정하면 OutOfMemory오류없이 Bitmap을 가져올 수 있다.


if(Math.max(options.outWidth, options.outHeight) > mOversize) 부분은 적절히 코딩해서

유동적으로 sampleSize를 지정할 수 있게하면 되겠다.

댓글