티스토리 뷰
내/외장에 저장 된 이미지 파일(PNG or JPEG ...)을 Bitmap으로 읽어 들이는 간단한 코드이다.
이미지 파일을 읽을 때 너무
큰 이미지는 OutOfMemory가 발생한다. 그래서 폰의 화면 해상도에 가장 근접하게 리스케일을 하여 읽어들이게 했다.
코드는 아주
간단하다.
/**
* 지정한 패스의 파일을 읽어서 Bitmap을 리턴 (화면사이즈에 최다한 맞춰서 리스케일한다.)
*
* @param context
* application context
* @param imgFilePath
* bitmap file path
* @return Bitmap
* @throws IOException
*/
public static Bitmap loadBackgroundBitmap(Context context,
String imgFilePath) throws Exception, OutOfMemoryError {
if (!FileUtil.exists(imgFilePath)) {
throw new FileNotFoundException("background-image file not found : " + imgFilePath);
}
// 폰의 화면 사이즈를
구한다.
Display display
= ((WindowManager) context
.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int displayWidth = display.getWidth();
int displayHeight = display.getHeight();
// 읽어들일 이미지의 사이즈를 구한다.
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Config.RGB_565;
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(imgFilePath, options);
// 화면 사이즈에 가장 근접하는 이미지의 리스케일 사이즈를
구한다.
// 리스케일의 사이즈는 짝수로 지정한다. (이미지 손실을 최소화하기
위함.)
float widthScale = options.outWidth / displayWidth;
float heightScale = options.outHeight / displayHeight;
float scale = widthScale > heightScale ? widthScale : heightScale;
if(scale >= 8) {
options.inSampleSize = 8;
} else if(scale >= 6) {
options.inSampleSize = 6;
} else if(scale >= 4) {
options.inSampleSize = 4;
} else if(scale >= 2) {
options.inSampleSize = 2;
} else {
options.inSampleSize = 1;
}
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(imgFilePath, options);
}
'개발 > 개발 자료' 카테고리의 다른 글
(Android) ImageView 라운드(둥근 테두리) 처리 (0) | 2014.01.06 |
---|---|
Can't create handler inside thread that has not called Looper.prepare() 에러발생시 해결방법 (0) | 2014.01.03 |
(Android) 이미지 용량 줄이기 (Bitmap 관리) (4) | 2014.01.01 |
(Android) android Bitmap <-> Byte 변환 (0) | 2014.01.01 |
(Android) 버튼에 일일이 리스너를 등록하지 않고 소스 작성하는법 (0) | 2014.01.01 |