본문 바로가기

Android

--- decoder->decode returned false 문제


갤러리에서 사진을 가져오는데

몇개의 특정 파일이 열리지 않는다. (보이지 않는다)



디버깅해보니 

BitmapFactory.decodeByteArray(test, 0, test.length); 이 null을 뱉는다.

그래서 Bitmap을 뿌릴 수 없게된것이다.



검색해보니 다른 블로그에서는 

1. 이미지의 용량이 커서 메모리를 차지하게되어 Exception 발생

2. 이미지를 다 받기 전에 디코더를 닫아버려서 Exception 발생


되는것으로 말하는것 같다. 


두번째는 모르겠고 첫번째에 무게를 두고자 한다. 


특정 사진들만 보여주지 않는데 이미지를 로드할때 option에 1/10 으로 줄여도 나타나지 않는것이다.

소스를 마구잡이로 짜다보니 예전에 넣고 계속 안봤던 코드가 보였다.



data.compress(CompressFormat.PNG, 100, byteArray);


Bitmap을 byte Array 로 만드는 코드인데 

compressFormat.PNG 와 100 으로 되어있었다......

즉 PNG 형식의 포맷과 화질을 100으로 하는것이다. 

혹시나 하고 JPEG으로 바꿨더니....... 정상적으로 작동한다.............

(이전에 다른문제로 이것저것 바꿔보다 낳은 폐해인듯)





처음로드할때 크기를 줄여도 압축형식을 요로케 하면 용량이 장난아닌듯하다..

동일한 문제의 파일(이미지)에 대해 테스트결과



 압축포맷

 byte 배열로 변경후의 length  

 compressFormat.PNG 

  525875

  compressFormat.JPEG   39275


솔직히...반신반의 테스트를 했는데......장난아니다.............

10배 이상 효율이 크다 -_-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




참고로 compressFormat의 종류로

public static final Bitmap.CompressFormat JPEG

public static final Bitmap.CompressFormat PNG

public static final Bitmap.CompressFormat WEBP


가 있다.