차근차근/Android

Bitmap, BitmapFactory 클래스와 이미지 맵핑

예쁜꽃이피었으면 2014. 8. 21. 12:21

http://warmz.tistory.com/415


Bitmap 클래스

 - 이미지에 대한 클래스, 새로운 이미지를 생설할 때 사용된다. android.graphics.Bitmap클래스는 생성자를 지원하지 않기 때문에 저장된 이미지를 불러와서 객체로 만들려면 createBitmap() 메서드를 호출해서 비트맵 객체를 생성하거나 BitmapFactory 등의 다른 클래스의 정적(static) 메서드를 사용해서 객체를 생성해야 한다. (이미 외부에 존재하는 이미지 파일을 가져와서 객체를 생성할때는 BitmapFactory 클래스를 사용한다.)



BitmapFactory 주요 메서드
 - decodeByteArray() : 바이트 배열로 넘겨받은 이미지 파일들을 디코딩할때 사용.
                                        보통 Camera.Picture.CallBack으로부터 받은 JPEG파일을 Bitmap으로 변환할때 사용.

                                        (Camera.Picture.CallBack에서 들어오는 데이터가 byte 배열로 들어오기 때문이다.)

 - decodeFile() : 로컬에 존재하는 파일을 그대로 읽을때 사용.
                              파일 경로를 매개인자로 넘겨주면 FileInputStream을 만들어서 decodeStream을 한다.
                              예) Bitmap image = BitmapFactory.decodeFile("/sdCard/test.jpg");

 - decodeResource() : Resource폴더에 저장된 그림파일을 Bitmap으로 만들어서 리턴한다.
                                        예) Bitmap image = BitmapFactory.decodeResource(getResource().R.drawable.--));

 - decodeStream() : InputStream으로 읽어들인 이미지를 Bitmap으로 만들어준다.



Options 클래스
 - 비트맵이 사용하는 옵션 클래스. 
 - Options 객체를 생성하고 설정하고자 하는 옵션을 넣은 후 BitmapFactory의 함수 호출시 인자로 넘겨서 사용한다.
 - inSampleSize : decode시 얼마나 줄일지 설정하는 옵션. 1보다 작을때 1이 되고 1보다 클때 1/N 만큼
                          이미지를 줄여서 디코딩한다. 보통 2의 배수로 설정한다.
1
2
3
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap img = BitmapFactory.decodeFile("/sdcard/test.jpg", options);
 
  

이미지 맵핑
 - 리소스에 이미지 파일을 저장한 후 액티비티 화면에 출력하는 것과 Canvas를 통해 드로잉하는 방법 두가지가 있다.
 
 1. BitmapFactory 이미지 맵핑
     - 리소스에 이미지 파일을 저장한 후 액티비티 화면에 표시하려면 다음과 같이 선언한다.
1
2
3
4
ImageView image = (ImageView)findViewById(R.id.imageView01);
Resource res = getResources();
Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.--);
image.setImageBitmap(bmp);

 
 2. Canvas를 통해서 드로잉
     - View클래스를 상속받아 커스텀View의 객체에서 onDraw()메서드를 통해 Canvas 객체의 drawBitmap() 메서드를 통해 구현
1
2
3
4
5
6
protected void onDraw(Canvas canvas){
    super.onDraw(canvas);
    Resources res = getResources();
    Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.--);
    canvas.drawBitmap(bmp, 0, 0, null);
}
 
void drawBitmap(Bitmap bitmap, float left, float top, Paint paint)
 - Bitmap을 canvas의 좌표(left, top)의 위치를 기점으로 그린다.

void drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
 - Bitmap의 이미 지정된 src로 둘러싸인 공간을 canvas 사각형 dst영역에 그린다.

void drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)
 - matrix개체 작업에 따른 Bitmap을 그린다. 


* Canvas로 드로잉하기 설명 ::
http://foxmann.blog.me/90094934520


반응형