주요글: 도커 시작하기
반응형

안드로이드에서 이미지를 ImageView에 출력할 때 발생할 수 있는 문제는 크게 다음의 두 가지가 있다.

이 두 가지 문제를 해소하려면 이미지 크기가 특정 크기를 넘어선 경우 이미지 크기를 줄여서 읽어오면 된다.

이미지 크기 구하기

이미지 크기를 구할 때에는 BitmapFactory.Options의 inJustDecodeBounds 값을 true로 지정해 주고, 이 옵션을 이용해서 BitmapFactory의 decode 메서드를 사용한다. 아래는 파일로부터 이미지 크기를 구할 때 사용되는 코드 예를 보여주고 있다.

private BitmapFactory.Options getBitmapSize(File imageFile) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(imageFile.getAbsolutePath(), options);
return options;
}


BitmapFactory의 decode 메서드는 옵션의 inJustDecodeBounds 값이 true일 경우, 이미지의 크기만 구해서 옵션에 설정한다. 이 메서드 실행 후, 옵션의 

BitmapFactory.options option = getBitmapSize(imgFile);
// option.outWidth : 이미지 폭
// options.outHeight : 이미지 높이

if (option.outWidth > maxWidthSize || option.outHeight > maxHeightSize) {
    // 최대 크기를 벗어난 경우의 처리, 이미지 크기 변환 등
}

이 값을 이용해서 이미지가 제한된 크기를 벗어났는지의 여부를 알 수 있다.

이미지 크기 변경하기

이미지 크기를 변경할 때에는 옵션의 inSampleSize 값을 이용한다. 예를 들어, 아래 코드는 크기를 2배 축소시켜서 Bitmap을 생성해주는 코드이다.

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath(), options);

3000*2000 크기의 이미지가 있을 때, inSampleSize 값으로 2를 사용하면 생성되는 Bitmap의 크기는 1500*1000이 된다. inSampleSize의 값을 4로 주면 실제 폭/높이는 1/4로 줄고, 8을 주면 실페 폭/높이는 1/8로 준다. 2의 거듭제곱을 inSampleSize의 값으로 주면 연산이 좀 더 빠르게 처리된다.

관련 자료


+ Recent posts