티스토리 뷰
High Resolution Bitmap를 ImageView에 적용 시 Bitmap Error를 해결하는 방법
데니 Denny 2019. 5. 30. 21:48최신 단말기에서는 크게 문제가 발생되지 않는 반면 예전(성능이 낮은) 단말기에서 고해상도의 Bitmap을 ImageView에 설정하면 보이지 않는 현상이 발생하는데 이를 해결하는 방법을 정리해보고자 한다.
Logcat을 살펴보면...
설정하려는 비트맵의 크기가 텍스쳐에 업로드할 수 있는것에 비해 너무 크다는 에러 로그가 뜬다.
W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (4160x2340, max=4096x4096)
안드로이드의 Hardware Accelerated를 사용할 경우 기본적으로 GL_MAX_TEXTURE_SIZE 만큼만 rendering을 할 수 있기 때문에 이 SIZE를 넘어가는 Bitmap들은 문제가 발생한다는 것이다.
해결 방법은 크게 두 가지로 나눌 수 있다.
1) Android Hardware Accelerated Option을 해제하여 하드웨어 가속을 사용하지 않음으로써 해결
2) Bitmap을 Resizing하여 사이즈 초과 문제를 해결
1의 해결방법으로는 아래와 같다.
AndroidManifest.xml 에서 해당 Activity의 속성에 아래 값을 추가.
android:hardwareAccelerated="false"
다만, 하드웨어를 꼭 사용해야 한다면, 1의 해결방법은 시도할 수가 없다. 2의 해결방법으로 시도하자.
2의 해결방법으로는 아래와 같다.
Bitmap resizeBitmap(Bitmap bitmap)
{
if(bitmap.getWidth() > GLES30.GL_MAX_TEXTURE_SIZE ||
bitmap.getHeight()> GLES30.GL_MAX_TEXTURE_SIZE)
{
float aspect_ratio = ((float)bitmap.getHeight())/((float)bitmap.getWidth());
int resizedWidth = (int)(GLES30.GL_MAX_TEXTURE_SIZE*0.9);
int resizedHeight = (int)(GLES30.GL_MAX_TEXTURE_SIZE*0.9*aspect_ratio);
return bitmap.createScaledBitmap(bitmap, resizedWidth, resizedHeight, false);
}
return bitmap;
}
Bitmap의 사이즈를 Resizing해주는 메소드를 정의한 것이다.
'Frontend > Android' 카테고리의 다른 글
Activity의 4가지 Launch Mode에 대하여 (0) | 2019.06.10 |
---|---|
Fragment 간의 데이터 전달 및 findViewById 사용하기 (0) | 2019.06.10 |
Retrofit2 사용해보기 (0) | 2019.05.31 |
ANR의 정의, 발생 요인 및 대응책 (0) | 2019.05.30 |
MQTT에 대한 이해 (0) | 2019.02.08 |
- Total
- Today
- Yesterday
- 애플워치
- Elliotable
- 아이폰
- 코틀린
- Swift
- XCode
- retrofit
- Kotlin
- 함수형
- Notissu
- Rxjava
- C++
- 안드로이드
- databinding
- android
- 스위프트
- 컬렉션
- java
- 오토레이아웃
- apple
- 상속
- 함수형프로그래밍
- 알고리즘
- Auto Layout
- ios
- Reactive programming
- Apple Watch
- watchos
- CloudComputing
- SwiftUI
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |