안드로이드에서 비트맵 리사이징이 필요한 이유는 몇가지가 있을 수 있는데,
- 이미지 사이즈가 너무 커서 줄여야 하는 경우
- 인텐트를 이용하여 주고 받을 때 데이터 사이즈가 커서 안되는 경우
- 기타 메모리 부족 문제
어쨌거나 안드로이드에서 비트맵 리사이징 하는 방법에는 아래 코드와 같이 하는 방법이 있다.
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap src = BitmapFactory.decodeFile("/sdcard/image.jpg", options);
Bitmap resized = Bitmap.createScaledBitmap(src, dstWidth, dstHeight, true);
inSampleSize 값을 적절히 사용해도 되겠지만 특정 너비나 높이값에 맞추어야 할 경우도 있다.
아래 코드는 높이 118에 맞춰서(정확하게는 118 이하로) 리사이징 하는 방법이다.
Uri imgUri = data.getData();
Bitmap bitmap = Images.Media.getBitmap(getContentResolver(), imgUri);
int height = bitmap.getHeight();
int width = bitmap.getWidth();
// Toast.makeText(this, width + " , " + height, Toast.LENGTH_SHORT).show();
Bitmap resized = null;
while (height > 118) {
resized = Bitmap.createScaledBitmap(bitmap, (width * 118) / height, 118, true);
height = resized.getHeight();
width = resized.getWidth();
}
// Toast.makeText(this, width + " , " + height, Toast.LENGTH_SHORT).show();
coverImageView.setImageBitmap(resized);