마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

bitmap 사용시 out of memory

0 추천
비트맵을 만들어 캔버스로 비트맵에 그림을 그리고

해당 비트맵을 이미지 뷰에 출력하는 부분이 있는데요,

비트맵 크기는 일단 단말기 해상도 구해서 해상도 크기로 생성해서

사용중입니다.

 

근데 해당 비트맵 이미지를 파일로 저장해서 보니

해상도 크기에 따라 그림의 퀄리티 차이가 났습니다. 그래서 어떤 단말기

에서도 똑같은 퀄리티를 만들기 위해 처음 비트맵 생성시 2560 x 1600 크기

로 생성후 이미지 뷰에 뿌리기 전에 화면 해상도에 맞춰

Bitmap.createScaledBitmap로 크기를 줄여 뿌리도록 했습니다.

이러면 어떤 해상도의 단말에서도 같은 퀄리티로 보일 거라 생각 했죠..

그러나 단말기에 따라서 out of memory가 나오더군요...

 

그냥 화면 해상도에 따라서 비트맵 크기를 조절해서

퀄리티 차이는 그냥 무시하고..

out of memory가 안나도록 하는게 좋을까요?

일반적으로 해상도가 좋으면 단말기 성능이 좋으니..

해상도에 맞춰 비트맵 크기를 설정하면 out of memory

는 발생하지 않겠죠..?

 

아니면 어떤 단말기든간에 같은 퀄리티로 이미지를 저장 할 수 있는

방법이 따로 있을까요??

같은 퀄리티라 함은..하향평준화가 아닌 상향 평준화입니다 ㅜ
익명사용자 님이 2014년 10월 30일 질문

3개의 답변

0 추천
 
채택된 답변

BitmapFactory.Options으로 이미지 품질과 inSampleSize를 줄인뒤 예외처리로 OutOfMemoryError가났을시 한번더 

줄여주는방식으로 합니다. 하지만 이또한 불안한요소들이많습니다. 폰들은 엄청나게다양하거든요..

 

2년전이나... 

https://code.google.com/p/android-imagedownloader/source/browse/trunk/src/com/example/android/imagedownloader/ImageDownloader.java 이런코드갖다썻지...

 

지금은 기능적인부분들을 커스터마이징할수있는 라이브러리가 엄청나게많습니다..

http://helloworld.naver.com/helloworld/textyle/429368

글내용에서와같이 이미지를 로딩하는 화면을 안정적으로 빠르게 동작하도록 만들기는 어렵습니다. 캐시, 병렬 처리, 실패 처리 등 개발할 요소가 많습니다.

 
물론 뭐 지금작업하시는 모든것들이.. 스터디용으로 하신다면 도움이 많이되겠지만요..
 

혹시나 올리는건데 유틸클래스로는 나중에 편하게 사이즈스케일줄이는 기능입니다.

https://github.com/morristech/AndroidDemo/blob/4eaece8e7e34276d56e803cfbb04356d67515e3c/ScalingImage/src/com/abhan/example/util/ScalingUtilities.java

 

 

whdrb19 (23,520 포인트) 님이 2014년 10월 30일 답변
0 추천
단말기 해상도에 맞게 비트맵을 생성하는것이 올바른 방법입니다.

720x1280 해상도 단말기에서 2560 x 1600 이미지를 표시하면 화면해상도에 맞게 스케일링됩니다.
익명사용자 님이 2014년 10월 30일 답변
0 추천
결과 Bitmap을 캐시파일처럼  로컬에 저장하시고,

뿌릴때는 AUIL 라이브러리로 로딩하여 이미지뷰에 뿌리는건 어떨까요?

예전에 OOM으로 엄청 고생햇는데

요즘은 디스플레이 시키는거나, 메모리관리는 다 ImageLoader에 위임하고 있습니다.
갸아악 (21,260 포인트) 님이 2014년 10월 30일 답변
...