2013년 1월 29일 화요일

[Android] Bitmap 모형

XML Bitmap 코드
<?xml version=”1.0” encoding=”utf-8”?>
<bitmap xmlns:android=”http://schemas.android.com/apk/res/android” 
     android:src=”@[package:]drawable/drawable_resource”
     android:antialias=[ ”true” | ”false” ]
     android:dither=[ ”true” | ”false”]
     android:filter=[ ”true” | ”false” ]
     android:gravity=[ ”top” | ”bottom” | ”left” | ”right” | ”center_vertical” | 
         ”fill_vertical” | ”center_horizontal” | ”fill_horizontal” | 
         ”center” | ”fill” | ”clip_vertical” | ”clip_horizontal” ]
     android:tileMode=[ ”disabled” | ”clamp” | ”repeat” | ”mirror” ]>
</bitmap>
  • android:src : 비트맵 이미지 소스
  • android:antialias : antialias 적용 여부
  • android:dither : dither효과 적용 여부
  • android:filter : 이미지를 축소하거나 늘렸을 때 기본 이미지를 변환시켜 선명도를 높이는 필터링 효과를 적용할 것인지 확인한다.
  • android:gravity : 이미지 위치를 나타낸다.
  • android:tileMode : tileMode를 설정하면 gravity 속성은 무시된다.

<참고>
  • Aliasing : 픽셀로 선을 표시하면 계단 현상이 발생한다. 이런 현상을  Aliasing이라 부른다.'android:antialias' 속성은 곡선을 부드럽게 처리 만들지를 정해주는 속성으로 해상도가 낮은 화면에서는 효과가 줄어든다.
  • Dithering : 화면의 제한된 컬러를 사용하여 본래의 높은 비트로 된 이미지의 컬로 효과를 최대한 복원하려는 영상처리 기법이다. 일반적으로 높은 비트의 컬러를 다른 컬러 패턴으로 대체하여 눈으로 하여금 연속적인 색상으로 인식하게 만든다.


JAVA Bitmap 코드
Bitmap 모형은 getResources()메서드와 getDrawable() 메서드를 사용하여 읽는다.
private void addResourceDrawable(LinearLayout layout, int resource) {
 View view = new View(this);
 final Drawable d = getResources().getDrawable(resource);
 view.setBackground(d);
 view.setLayoutParams(new LinearLayout.LayoutParams(d.getIntrinsicWidth(), d.getIntrinsicHeight()));
 layout.addView(view);
}
  • getIntrinsicWidth() method 와 getIntrinsicHeight() method는 모형이 가지고 있는 기본적인 너비와 높이를 제공한다.

모형을 조정하여 화면에 출력하고 싶다면 BitmapFactory class를 사용하여 만든다.
private void addResourceDrawable(LinearLayout layout, int resource) {
 View view = new View(this);
 BitmapFactory.Options opts = new Options();
 opts.inScaled = true;
 opts.inDither = true;
 final BitmapDrawable d = new BitmapDrawable(getResources(), BitmapFactory.decodeResource(getResources(), resource, opts));
 view.setBackground(d);
 view.setLayoutParams(new LinearLayout.LayoutParams(d.getIntrinsicWidth(), d.getIntrinsicHeight()));
 layout.addView(view);
}
  • BitmapDrawable class를 이용하여 간편하게 bitmap 파일을 Drawable파일로 변경 가능하다.
  • BitmapFactory.Options 클래스는 비트맵을 생설할때 적용하는 밀도라든가 크기 변경, Dither등의 옵션을 제공한다.
  • inSampleSize = 4의 뜻은 원본사이즈의 1/4 이라는 의미이다. 파일 용량이 너무 큰 이미지들은 Memory leak이 발생 할 확률이 높으므로 이 경우에는  inSampleSize 옵션을 이용하여 이미지를 줄인 다음 decodeResource() method로 읽어 드리면 된다. Tip으로 inSampleSize의 값은 2의 배수로 설정해 주는게 속도가 빠르다고 합니다. 

댓글 없음:

댓글 쓰기