안드로이드 개발 질문/답변
(글 수 9)
안녕하세요.
C++로 처리한 이미지를 byte로 받아와서 jpg로 저장하기 위해 Bitmap compress를 하는데요.
640*480, 800*480은 아무 문제없이 저장이 잘 됩니다.
그런데, 1600*1200는 compress에서 NullPointerException이 발생하고
-1*-1로 저장됩니다.
1600*1200을 BitmapFactory.decodeFile하는 것은 문제가 없고 compress에서만 에러가 납니다.
카메라가 더 훨씬 큰 이미지를 저장하는 것을 보면 왠지 될 것도 같은데요.
메모리를 어떻게 해야 하는건지, 다른 어떤 방법이 있는건지,
해결방법을 정말 알고 싶습니다.
갤럭시S에서 테스트하고 있습니다.
byte[] imageData = opencv.getImage(trans_x*image_scale, trans_y*image_scale, angle); opencv.Release(); Bitmap bitmap_temp = BitmapFactory.decodeByteArray(imageData, 0, imageData.length); imageData = null; OutputStream outstream = contentResolver.openOutputStream(mSavedFileUri); try{ bitmap_temp.compress(Bitmap.CompressFormat.JPEG, image_quality, outstream); } catch (NullPointerException e) { Toast.makeText(this, e.getMessage()+" NullPointerException", 0).show(); } outstream.close(); bitmap_temp.recycle(); bitmap_temp = null;
2011.07.07 18:23:03
저장 목적이 무엇인지 는 잘 모르겠으나 사이즈가 큰 비트맵은
inSampleSize 옵션 이 도움이 될 수도 있겠네요 (사이즈를줄여서(화질을 떨어뜨려) 로딩하는 방법)
요기도 참고해보세요 http://chiyo85.tistory.com/entry/Android-Bitmap-Object-Resizing-Tip
에러 메시지를 못봐서 모르겠지만..
9번 라인에서 nullpointer 익셉션이 나려면..
bitmap_temp가 null인 경우 같은데..
비트맵을 decode제대로 한 것인지 확인이 필요할 것 같네요.