고해상도 bitmap을 ImageView 설정 시 에러 수정하기.
문제: 특정 단말기에서 고해상도의 Bitmap을 ImageView에 설정하면 보이지 않는 현상.
원인:
로그캣에 아래와 같은 로그를 발견할 수 있다...
설정하려는 비트맵의 크기가 텍스쳐에 업로드할 수 있는것에 비해 너무 크다는 이야기..
W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (4160x2340, max=4096x4096)
다시말해 안드로이드의 하드웨어 가속 시 기본적으로 GL_MAX_TEXTURE_SIZE 만큼만 rendering을 할 수 있기 때문에 이 사이즈를 넘어가는 비트맵은 정상적으로 처리가 되지 않는다.
이다.
대책:
1. 하드웨어 가속끄기
수정방법: AndroidManifest.xml 에서 해당 Activity의 속성에 아래 값을 추가.
android:hardwareAccelerated="false"
하드웨어 가속을 사용해야 하는 경우라면 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;
}
그래픽 라이브러리의 버전은 아래 사이트에서 확인가능합니다.
https://developer.android.com/guide/topics/graphics/opengl.html