안드로이드에서 대용량 이미지를 원보 그대로 보여주려면....
조회수 1803회
제목 그대로 입니다. 안드로이드 어플리케이션에서 OOM(Out Of Memory)를 내지 않고 이미지의 원본 그대로를 로딩해서 보여주려면 ndk를 사용해야 하나요?
opencv를 이용해서 할 수 있나요?
디바이스의 기본 갤러리에서는 원본 그대로를 보여주는 건가요?
혹시 opencv를 이용해서 가능하다면 예제코드나 도움이 될만한 웹페이지 좀 부탁드립니다.
1 답변
-
대용량 이미지를 원본으로 보여주는 것은 대부분의 경우 의미가 없습니다. 특히 말씀하신 OOM 현상을 회피하기 어렵기 때문에 앱의 안정성 및 성능을 확보할 수 없습니다.
예를 들어서 ImageView의 크기가 200x200 픽셀이고, 이곳에 보여주고 싶은 이미지가 1000x1000 픽셀이라고 했을 때, 원본을 그대로 보여주는 것이 특별한 이점을 제공하지 않는 것과 같습니다. 단지 메모리를 많이 소비한다는 것과 이에 따른 오버헤드만 증가할 뿐입니다.
마찬가지로 디바이스의 기본 갤러리도 원본을 그대로 보여주지 않습니다. 큰 비트맵을 서브샘플링해서 더 작은 메모리로 이미지를 보여주는 방식으로 코드를 작성해야 합니다.
관련해서는 다음 문서를 읽어보시기 바랍니다.
참고로 opencv 라이브러리와는 상관이 없습니다. 오히려 Glide, Picasso, Fresco와 같은 라이브러리를 살펴보는게 도움이 될 것 같습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
- 의미가 없는건 알고는 있습니다. NDK를 이용해서 어플에 할당된 메모리보다 더 큰 용량의 메모리를 사용해 보고 싶어서 그렇습니다. 혹시 방법을 알고 계십니까? 김선태 2017.2.11 14:44
- NDK를 사용해서 개발하고 싶다면 C/C++을 이용해서 네이티브 힙에 비트맵을 로드하는 식으로 코드를 작성한 뒤, 자바에서 해당 코드를 JNI를 통해 호출하도록 개발 환경을 구성해야 합니다. 정리하면 1) NDK 개발 환경 구성, 2) C/C++을 이용해서 비트맵 로드 코드 작성, 3) JNI 코드 작성, 4) 자바 코드 작성. 이 정도가 방향이 될 것 같고요. 좀 더 자세한 코드는 다음 링크를 참고해보세요. http://sbcgamesdev.blogspot.co.id/2012/12/load-images-under-android-with-ndk-and.html, http://stackoverflow.com/questions/18250951/jni-bitmap-operations-for-helping-to-avoid-oom-when-using-large-images, (구글에서 JNI, Bitmap과 같은 키워드로 검색해보면 정보를 얻을 수 있습니다.) 알 수 없는 사용자 2017.2.11 15:13
- 찾아보겠습니다. 답변 감사합니다. 김선태 2017.2.11 15:45
-
댓글 입력