안드로이드 (Android) Bitmap 구현, 관리 하기 

 

개발환경 : JDK 1.5, eclipse-galileo, android googleAPI 7, window XP


모든 프로그램에서 이미지 관리의 기본은 비트맵이다. 안드로이드에서도 마찬가지로

이미지 관리와 표현을 위해서는 비트맵을 익히는게 가장 기본이다. 그 비트맵 관련

내용들을 소개한다.

 

안드로이드에서 비트맵 관련 클래스는 android.graphics.Bitmap 이다. 그래픽 관련

클래스들은 android.graphics 패키지에 있으며 여기에 포함된 것이다.

그리고 객체 Factory 관리를 위한 BitmapFactory 클래스가 있다. BitmapFactory

여러가지 이미지 포맷을 decode 해서 bitmap 으로 변환하는 함수들로 되어있는데

그 이름들은 decodeXXX 로 되어있어서 쉽게 원하는 기능의 함수를 찾을수 있을

것이다.

 

(1) BitmapFactory 에서 주로 사용하고 있는 함수와 옵션에 대한 설명


BitmapFactory.decodeByteArray()
: Camera.PictureCallBack  으로부터 받은 Jpeg 사진

데이터를 가지고 Bitmap  으로 만들어 줄 때 많이 사용한다.

Camera.PictureCallback 에서 들어오는 데이터가 byte[] 배열로 들어오기 때문이다.

 

BitmapFactory.decodeFile() : 로컬에 존재하는 파일을 그대로 읽어올 때 쓴다. 파일경로를

파라미터로 넘겨주면 FileInputStream 을 만들어서 decodeStream 을 한다.
Bitmap orgImage = BitmapFactory.decodeFile(“/sdcard/test.jpg”);

BitmapFactory.decodeResource() : Resource 폴더에 저장된 그림파일을 Bitmap 으로

만들어 리턴해준다
Bitmap orgImage =
     BitmapFactory.decodeResource(getResources(), R.drawable.test02);

BitmapFactory.decodeStream() : InputStream 으로부터 Bitmap 을 만들어 준다.

 

BitmapFactory.Options : BitmapFactory 가 사용하는 옵션클래스이다. Options 객체를 생성하고

설정하고자 하는 옵션을 넣은후 BitmapFactory 의 함수 실행시 파라미터로 넘기면된다.

inSampleSize : decode 시 얼마나 줄일지 설정하는 옵션인데 1보다 작을때는 1이 된다.

1보다 큰값일 때 1/N 만큼 이미지를 줄여서 decoding 하게 된다. 보통 2의 배수로 설정한다.
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap orgImage = BitmapFactory.decodeFile(“/sdcard/test.jpg”, options);


(2) Bitmap 과 BitmapFactory 을 사용한 여러가지 예제 


BitmapFactory 로 이미지를 읽어온뒤 Bitmap.createScaledBitmap() 사용해서 크기를 재조정

할수 있다. 하지만 예를 들어 크기를 일정하게 2, 4 배등으로 줄일거면 굳이 createScaledBitmap

을 사용하지 않고 위에서 설명한 BitmapFactory.Options inSampleSize 를 사용하면 된다.

아래는 SD 카드에서 이미지를 불러와 Bitmap 을 원하는 크기 만큼 줄인 예제이다.

Bitmap orgImage = BitmapFactory.decodeFile(“/sdcard/test.jpg”);
Bitmap resize = Bitmap.createScaledBitmap(orgImage, 300, 400, true);

다음은 BitmapFactory.Options 사용해서 이미지를 4배로 줄인것인데 createScaledBitmap

사용해서 용량을 줄인 이미지에 다시 입력한 크기만큼 가로, 세로 크기를 줄인 것이 된다.

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap orgImage = BitmapFactory.decodeFile(“/sdcard/test.jpg”, options);
Bitmap resize = Bitmap.createScaledBitmap(orgImage, 300, 400, true);
저작자 표시
Posted by 녹두장군

댓글을 달아 주세요

  1. shinlucky 2010/06/26 19:59  댓글주소  수정/삭제  댓글쓰기

    으흠 좋은 글 잘 보았습니다. 팩토리로부터 스트림으로 읽어들일려고 하거든요 ^_^

  2. 안드로메다 2010/09/11 19:44  댓글주소  수정/삭제  댓글쓰기

    저 다른 강좌는 소스가 다 있는데...

    이 곳은 왜 없나요..전 비트맵불러와서 분할 하는거 공부하고 있는데요

    필요하거든요...부탁드립니다.

  3. jojae1122 2011/05/18 01:05  댓글주소  수정/삭제  댓글쓰기

    비트맵을 분할하여
    직쏘퍼즐을 만들려고합니다.
    윗부분은 알겠는데
    잘라내어 분할하는걸 모르겠습니다 ㅜ
    소스좀 올려주시거나
    angelos07@nate.com으로
    소스좀 보내주시면 감사하겠습니다 ㅠㅠ

  4. yeseul 2011/10/19 21:44  댓글주소  수정/삭제  댓글쓰기

    이 비트맵을
    canvas위에다가 올려놓을 건데요 ;;
    아무리 해봐도 안 되네요 ㅜㅜㅜ
    방법 없을까요 ??
    제가 하려는 건 배경이미지위에 그리는 거에요 ;;;

  5. 뭐 이래 2011/12/07 11:54  댓글주소  수정/삭제  댓글쓰기

    소스를 달라니 거참 이상한 사람들이네요 ㅡ ㅡ....

    이렇게 도움 주는 정보가 어딧다고 밥까지 떠먹여 달라그러나 ㅋㅋ

    좋은 정보 감사드립니다. 버퍼로써 관리하려면 creatScaleBitMap을 써야겠군요.

  6. hart 2012/02/23 13:56  댓글주소  수정/삭제  댓글쓰기

    이런 좋은글에 댓글이 없으면 안되죠

    감사합니다 ㅋㅋㅋ

  7. good 2012/05/31 17:35  댓글주소  수정/삭제  댓글쓰기

    잘보고갑니다~

  8. 황민규 2012/10/04 11:54  댓글주소  수정/삭제  댓글쓰기

    좋은 정보에 잘정리된 내용 감사합니다.

  9. 문정수 2013/01/28 10:27  댓글주소  수정/삭제  댓글쓰기

    소스를 달라니~~-_-
    과제 하는 애들인가? -_-
    아 저런 넘들이 회사에 들어 올까 겁나네요 -_-

  10. pooh오빠 2013/08/16 18:16  댓글주소  수정/삭제  댓글쓰기

    아 저런 쉬운것도 생각을 못 하다니...ㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲㄲ

  11. 감사합니다 2014/07/11 13:46  댓글주소  수정/삭제  댓글쓰기

    강좌글 잘보고갑니다..
    저도 소스달라는 분들은 이해 안가네요 .. 직접해보는게 더 도움되요.



티스토리 툴바