티스토리 뷰

반응형
SMALL

최신 단말기에서는 크게 문제가 발생되지 않는 반면 예전(성능이 낮은) 단말기에서 고해상도의 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해주는 메소드를 정의한 것이다.

반응형
LIST
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 29 30 31
글 보관함