본문 바로가기
개발(Development)/Android(안드로이드)

[안드로이드] Canvas: trying to draw too large bitmap. 런타임 에러 해결 방법

by 카레유 2021. 7. 31.

ImageView와 관련하여 아래와 같은 런타임 오류가 발생할 때가 있다.

 

 

 java.lang.RuntimeException: Canvas: trying to draw too large(110250000bytes) bitmap

 

로그에서 설명해주듯이

발생 원인은 이미지가 너무 커서

앱이 구동된 환경의 캔버스에서 못 그리겠다는 것이다.

 

해결 방법은 4가지다.

 

1. 이미지 사이즈를 줄여서 교체한다.

- 본인은 가급적 이 방법을 사용한다.

- 특별한 상황이 아니라면 앱 용량도 줄어들고 효율적이기 때문에 이미지 크기를 줄이는 방법을 추천한다.

 

 

2. 고해상도 전용 drawable-xxhdpi 혹은 drawable-xxxhdpi  폴더로 이미지를 옮긴다.

- 기본 drawable 폴더는 mdpi 해상도의 이미지를 보관하고,

- 해상도별로 별도의 폴더에 이미지를 보관하는게 권고되는 듯 하다.

- StackOverflow의 관련 답변 참고: https://stackoverflow.com/questions/40835514/android-canvas-drawing-too-large-bitmap

 

 

3. Android manifest 파일에서 하드웨어 가속 속성을 false로 준다.

- application 전역에서 하드웨어 가속을 false 설정해도 되고, 특정 activity에만 설정해도 된다.

- 근데 체감상(?) 애니메이션 등의 작업이 느려지는 느낌이 든다.(상황에 맞게 사용하자)

    <application android:hardwareAccelerated="true">
        <activity ... />
        <activity android:hardwareAccelerated="false" />
    </application>

- 하드웨어 가속에 대한 자세한 내용은 레퍼런스 참고: https://developer.android.com/guide/topics/graphics/hardware-accel

 

 

4. Glide 등의 외부 라이브러리를 사용한다.

- 자세한 사용 방법은 생략.

 

 

 

 

 

 

댓글