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

OOM 메모리 방지를 위한 이미지 사이즈 줄이기

0 추천

이미지 사이즈를 줄여서 하는 방법을 찾아보았는데

 

BitmapFactory.Options resizeOpts = new Options();
resizeOpts.inSampleSize = 2;
Bitmap tempBitmap = BitmapFactory.decodeStream(new FileInputStream(bitmapFile), null, resizeOpts);
Bitmap finalBitmap = Bitmap.createScaledBitmap(tempBitmap, dimen[0], dimen[1], false);
 
이와 같은 코드로 2를 할 경우 1/2로 사이즈를 줄여서 디코딩이 가능하다고 합니다.
 
그런데 제가 쓰고 있는 현재코드는
 
container.setDrawingCacheEnabled(true);
container.buildDrawingCache(true);
Bitmap captureView = Bitmap.createBitmap(width_container, height_container, Bitmap.Config.ARGB_8888); 
Canvas screenShotCanvas = new Canvas(captureView); 
container.draw(screenShotCanvas); 
container.setDrawingCacheEnabled(false);
 
이런식으로 이미지를 캡쳐해서 쓰고 있거든요.
 
캔바스에 그리는 형식인데 그러면 위 코드를 적용하려면 캔바스에 그리기 전에 1/2된 이미지를 먼저 생성하고 그려야되는건가요?
 
비트맵코드에서 적용해보려고 하는데 해보려니까 좀 어렵네요..

 

브루스웨인 (8,580 포인트) 님이 2014년 8월 10일 질문

4개의 답변

0 추천
 
채택된 답변
container.setDrawingCacheEnabled(true);
container.buildDrawingCache(true);
Bitmap captureBitmap = container.getDrawingCache();
FileOutputStream outputStream = new FileOutputStream(savePath);
captureBitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
outputSream.close();
container.setDrawingCacheEnabled(false);
 
DrawingCache를 바로 파일로 저장하시고 위에 소스로 옵션을 줘서 작게 불러다 써보세요
alkyne (22,960 포인트) 님이 2014년 8월 11일 답변
브루스웨인님이 2014년 9월 5일 채택됨
0 추천
저는 이미지 파일의 크기가 커도 이어받기를 통해서 한번 다운도르 하는데 사용되는 메모리 양을 제한한다음에 Thread를 사용해서 다운이 완료될때 가지 반복해서 Thread가 실행되도록하면 용량에 상관없이 다 다운이 가능하더군요. 아니면 Volley를 한번 사용해보세요 저는 이미지 다운로드가 아니고 파일 다운로드라 이미지는 잘 모르겠지만 저게 이미지 다운용으로 android에서 만든 오픈 라이브러리라네요
jeongupark (710 포인트) 님이 2014년 8월 11일 답변
아 저게 다운용인가요? 특정기기에서 화면캡쳐할 때 oom이 나는바람에 저 방법을 쓰면 될까 싶어서요
0 추천
http://helloworld.naver.com/helloworld/429368

이미지 라이브러리 비교해놓은거 있습니다
쎄미 (162,410 포인트) 님이 2014년 8월 11일 답변
0 추천
ARGB_8888 대신 565를 쓰는 방법도 있을것 같습니다

8888은 Red, Green,Blue, Alpha 각채널이 8비트씩 차지하여 픽셀당 4바이트를 먹지만

565는 Red, Green, Blue 가 각각 5, 6, 5씩 차지하여 16비트로 픽셀당 2바이트를 먹습니다.

(사람눈은 녹색에 민감하다고 하여 녹색에 가중치를 더 줬다는군요...)

그냥 지나가다 하는 여담 이었습니다.. ;;;
삽질하세 (1,250 포인트) 님이 2014년 8월 11일 답변
...