IT_Programming/Android_Java

[펌] Bitmap 생성 없이도 Bitmap 크기 정보를 구하는 방법

JJun ™ 2012. 10. 5. 21:47


출처: http://oic.tstore.co.kr/front/community/mentoring/viewMentoring.action?seq=205



[Bitmap 생성 없이도 Bitmap의 크기정보를 구하자]

- 리소스 ID나 파일 경로 등의 정보로 Bitmap 생성 없이도 Bitmap 크기 정보를 구하는 방법을 소개합니다.


[내용]
보통 불러와야 할 이미지 용량이 크거나 화면에 표시될 크기 보다 클 경우 이미지를 줄여서 사용해야 합니다.
이럴 때 해당 이미지를 불러와서 용량과 크기를 비교해서 처리를 합니다. 
그런데 용량이 큰 이미지 같은 경우는 이미지 비교하기도 전에 이미지를 불러올 때 힙 용량초과로 문제가 될 수 있습니다.  이제 이런 걱정을 해소해 드리도록 메모리와 무관하게 이미지를 불러오는 방법을 소개합니다.



[방법]
BitmapFactory.Options의 inJustDecodeBounds 변수에 true를 사용하면 

Bitmap은 메모리를 차지 않으면서도 이미지 정보를 구할 수 있습니다.



public boolean inJustDecodeBounds 


Since: API Level 1
 
If set to true, the decoder will return null (no bitmap), but the out... fields will still be set, allowing the caller to query the bitmap without having to allocate the memory for its pixels.  



[코드] 


  // drawable 폴더에 dream.png로 큰 이미지를 넣어놓고 실험합니다.

  final BitmapFactory.Options options = new BitmapFactory.Options();
  options.inJustDecodeBounds = true;
  Bitmap oBmp = BitmapFactory.decodeResource(getResources(), R.drawable.dream, options);
  

  // 파일일 경우. BitmapFactory.decodeFile(filename, options); 
  final int height = options.outHeight;
  final int width = options.outWidth;
        
  Log.d("@@@", "Image W: "+width + " H: "+height + " Bitmap: "+oBmp);
  // 로그켓 출력 값: Image W: 1920 H: 1200 Bitmap: null