본문 바로가기

프로그래밍/안드로이드

[안드로이드/Android] Bitmap Drawable 변환 크기

[안드로이드/Android] Bitmap Drawable 변환 크기


안녕하세요. 초보플밍지기 입니다. 프로그램을 하다보면 애니매니션이나 View의 배경으로 사용하기 위해 비트맵을 Drawable의 하위 클래스로 변환해서 써야할 때가 있는데요. 대부분 아래 코드와 같이 사용하실 겁니다.


Bitmap bitmap = BitmapFactory.decodeFile(“/sdcard/test.jpg”);

Drawable drawable = new BitmapDrawable(bitmap);

 

근데....그런데!!!!


비트맵을 그대로 배경으로 적용했을때는 이미지도 선명하고 잘보이실텐데 이상하게 동일한 녀석을 Drawable로 바꾸면 영~~~~ 구려 집니다. 왜!!! 그럴까요?


BitmapDrawable은 다양한 생성자를 제공합니다. 아래 안드로이드 API에서 발췌한 것입니다.

Public Constructors
BitmapDrawable()
This constructor was deprecated in API level 4. Use BitmapDrawable(Resources) to ensure that the drawable has correctly set its target density.
BitmapDrawable(Resources res)
Create an empty drawable, setting initial target density based on the display metrics of the resources.
BitmapDrawable(Bitmap bitmap)
This constructor was deprecated in API level 4. Use BitmapDrawable(Resources, Bitmap) to ensure that the drawable has correctly set its target density.
BitmapDrawable(Resources res, Bitmap bitmap)
Create drawable from a bitmap, setting initial target density based on the display metrics of the resources.
BitmapDrawable(String filepath)
This constructor was deprecated in API level 5. Use BitmapDrawable(Resources, String) to ensure that the drawable has correctly set its target density.
BitmapDrawable(Resources res, String filepath)
Create a drawable by opening a given file path and decoding the bitmap.
BitmapDrawable(InputStream is)
This constructor was deprecated in API level 5. Use BitmapDrawable(Resources, java.io.InputStream) to ensure that the drawable has correctly set its target density.
BitmapDrawable(Resources res, InputStream is)
Create a drawable by decoding a bitmap from the given input strea

출처 : http://developer.android.com/reference/android/graphics/drawable/BitmapDrawable.html


위에서 노란색 음영으로 표시된 부분이 보이시죠? 그녀석들을 쓰게 되면 현재 단말 해상도의 Density에 맞추어서 Drawable를 만들어 주게 된답니다.

만약 Resources가 없는 생성자를 쓰시게 되면 기본 Density인 160을 적용하여 만들어 주게 되지요.


Drawable은 Bitmap을 Rapper 역활은 해주지만 직접적으로 이미지를 가공하지는 않습니다. BitmapDrawalbe에 비추어 보자면 BitmapDrawable은 draw(Canvas canvas)가 호출될때 자신이 가지고 있는 density 정보를 바탕으로 그리는 크기를 조절하지만 본인이 직접 원본인 Bitmap의 가공은 하지 않는겁니다.


저처럼 이런 것들 때문에 삽질하지 마시기 바랍니다. ㅋ


궁금하신건 언제든지 댓글 달아 조세요.