applan의 개발 이야기

[오류해결] Android BitmapFactory 오류 본문

개발/Dev.

[오류해결] Android BitmapFactory 오류

applan 2022. 8. 23. 17:49
728x90
사용 프레임워크 : 모피어스 

💥 발생

프로젝트 기능 변경 테스트 진행 중 발생.

HTML canvas를 이용해 이미지를 생성 후 안드로이드 다른 앱으로 간단한 데이터 보내기 기능을 이용하려는데...

기존 URL Image 로 가져오던 소스가 Base64 로 인코딩 되어있는 URL 를 읽지 못해 좀더 뒤에 있는 소스까지 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference 에러를 발생시키며 앱을 튕기게 만듬.

🧑‍💻 문제 확인

java.net.MalformedURLException: unknown protocol: data 에러는 사실상 canvas에서 canvas.toDataURL(); 를 사용하여 데이터를 가져오면 Base64 형태로 URL을 전달해주기 때문에 굳이 net을 이용할 필요가 없다고 판단함, 

android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream) on a null object reference 에러 메시지가 중요하다고 판단

에러 내용을 해석을 해보면 Null 에서 Bitmap.compress를 참조하고있다는 에러 메시지로 보여졌다. 

 

🤔 문제 해결 과정

Null 에서 Bitmap.compress를 참조하고있다는 말은 즉 Bitmap 객체가 Null 일 것이라고 생각했다.

그래서 바로 AndroidStudio의 디버깅 모드 이용 

bm 이 Null로 초기화되는 것을 확인할 수 있다.

그럼 dataURL(Base64) 방식으로 넘겨온 정보를 어떻게 이미지화 시켜서 휴대폰에 저장 후 공유하기 기능을 사용할 수 있을까 검색을 진행해보았다. 순수 안드로이드 스튜디오 방식 코딩이 아닌 모피어스 프레임워크를 통한 방식이기 때문에 검색에 어려움이 있었다. 

그래서 안드로이드 자체에서 처리하는 방식을 먼저 검색해볼필요가 있었고 해당 질문을 찾게되었다.

이 질문에서 처리하는 방법 중 

byte[] decodedString = Base64.decode("Your Base64 String", Base64.DEFAULT);
Bitmap bitMap = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);

해당 소스가 굉장히 눈에 띄었으며 요 방식대로 도전해보고자 소스를 수정하였지만... 동일하게 null 에러가 발생하였고 좀더 검색을 진행해보았다. 그러는 중...

 

😃 문제 해결

검색을 더 진행하는 중 질문 하나를 보게되었는데..

String encodedString = "data:image/jpg;base64, ....";                        
String pureBase64Encoded = encodedString.substring(encodedString.indexOf(",")

substring 을 이용해 "data:image/jpg;base64"를 제거해야한다는 것을 확인하게 되었다.

진행하고있던 소스를 수정 후 테스트해보니 

정상 동작 확인!!!!

 

🎓 배운점

  1. dataUrl -> Bitmap 캐스팅에는 dataUrl의 타입 선언부를 잘라주어야 인식한다.
  2. 디버깅 모드는 짱이다. 👍👍👍

 

🧗 공부해볼것

1. Bitmap, BitmapFactory Class 공부 

2. dataUrl 자세히 공부 

  1. Bitmap, BitmapFactory Class 공부
    1. Bitmap 개념
    2. Bitmap, BitmapFactory 사용 예시 및 사용처 ( 간략하게 )
  2. dataUrl 자세히 공부
    1. dataUrl 개념
    2. dataUrl 사용 예시 및 사용처 ( 간략하게 )

👣 흔적

github 검색 흔적

google 검색 흔적

728x90
Comments