bitmaps[1] = BitmapFactory.decodeResource(getResources(), R.drawable.cc);
bitmaps[2] = BitmapFactory.decodeResource(getResources(), R.drawable.bb);
bitmaps[3] = BitmapFactory.decodeResource(getResources(), R.drawable.bb);
bitmaps[4] = BitmapFactory.decodeResource(getResources(), R.drawable.cc);
bitmaps[5] = BitmapFactory.decodeResource(getResources(), R.drawable.cc);
bitmaps[6] = BitmapFactory.decodeResource(getResources(), R.drawable.bb);
bitmaps[7] = BitmapFactory.decodeResource(getResources(), R.drawable.bb);
bitmaps[8] = BitmapFactory.decodeResource(getResources(), R.drawable.cc);
이런식으로 마구잡이로 비트맵 이미지를 할당하다보니 OutOfMemoryError 예외가 터져버렸다..
원인을 찾아보니 너무 큰 이미지를 많이 불러와서 hip memory의 용량을 초과해서 문제가 생긴 것이였다.
이에 대한 해결책으로 BitmapFactory.Options을 사용하여 이미지의 크기를 줄이는 방법을 발견했다.
//이 부분은 이미지의 사이즈를 줄여서 힙 메모리 초과로 앱이 종료되는걸 막기 위함이다.
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4; // 1/4만큼 이미지를 줄여서 decoding 하겠다 라는 뜻
Bitmap src = BitmapFactory.decodeResource(getResources(), R.drawable.aaa, options);
bitmaps[1] = Bitmap.createScaledBitmap(src, width/2, height/2, true);
options.inSampleSize에 8을 넣으면 이미지를 기존 크기에서 1/8로 줄여서 decoding 한다는 뜻이다.
만든 옵션을 BitmapFactory.decodeResource( _ , _, option); 에 줘서 비트맵을 만들고,
Bitmap.createScaledBitmap( 비트맵이미지, 이미지 가로길이, 이미지 세로길이, 옵션) 으로 원하는 크기의 이미지를 생성한다. 옵션을 true로 줄경우 pixel을 조정하여 이미지를 더 선명하게 보이도록 도움을 주나 많이 큰 이미지에 사용하면 OutOfMemoryError가 터질 수 있으니 주의하자!
'안드로이드+자바' 카테고리의 다른 글
안드로이드 viewpager 사용법 (0) | 2017.01.21 |
---|---|
안드로이드 상단 타이틀바 없에는 법. (0) | 2017.01.20 |
안드로이드 Activity 팝업창 만들기!! (0) | 2017.01.17 |
파이어베이스 storage 사용하는 코드 (0) | 2017.01.15 |
Firebase storage 사용할 때 주의사항!! (0) | 2017.01.15 |
댓글