안드로이드/Android Bitmap 정리~!
안드로이드 Bitmap
Bitmap 상속 계층도
java.lang.Object
└─ android.graphics.Bitmap
Bitmap 은 머야?
안드로이드에서 이미지를 표현하기 위해 사용되는 녀석이 Bitmap입니다.
Bitmap와 같이 봐야될 녀석은 BtimapFactory클래스 인데 이름에서 알수 있듯이 "Factory" 공장입니다. 바로 Bitmap를 만들어 주는 녀석이죠. 안드로이드에서 사용자가 원하는 이미지를 코드상에 넣을려면 해당 이미지는 /res/drawable-xxxx/ 곳에 넣으시면 됩니다. 권장하는 확장자는 png이지만 jpg도됩니다.
파일을 넣으실때 주의 하셔야 될것은 파일이름은 영어소문자, _(언더바) 만 사용가능하다는거 잊지마세요.
BitmapFactory 에서 사용되는 메소드
Bitmap을 다루기 위해 주로 사용되는 녀석은 Bitmap안에 있는 메소드가 아니라 BitmapFactory안에 있는 메소드를 주로 사용합니다. 왜그리 되냐면,
이미지 생성(공장에서 만들기 : BitmapFactory ) ---> 화면에 그리기 (Canvas에 그리기 : Canvas )
위의 단계만 거치면 되니 공장에서 사용되는 메소드가 필요하겠죠?
BitmapFacroty 메소드 - 모두 public static Bitmap 로 시작하니 생략하도록 하겠습니다.
decodeByteArray(byte[] data, int offset, int length, BitmapFactory.Options opts)
decodeByteArray(byte[] data, int offset, int length)
byte 배열 형태로 되어있는 이미지를 Bitmap으로 만들때 사용합니다.
decodeFile(String pathName)
decodeFile(String pathName, BitmapFactory.Options opts)
휴대폰 안에 파일 형태로 저장된 이미지를 Bitmap으로 만들때 사용합니다.
Bitmap _bit = BitmapFactory.decodeFile("/sdcard/aaa.jpg");
decodeFileDescriptor(FileDescriptor fd)
decodeFileDescriptor(FileDescriptor fd, Rect outPadding, BitmapFactory.Options opts)
FileDescripter로부터 Bitmap를 만들때 사용됩니다. (FileDescripter는 java.io 패키지를 살펴보시면 됩니다.)
잘 모르시겠으면 일단 패스!
decodeResource(Resources res, int id, BitmapFactory.Options opts)
decodeResource(Resources res, int id)
decodeResourceStream(Resources res, TypedValue value, InputStream is,
Rect pad, BitmapFactory.Options opts)
res 폴더에 저장된 녀석들을 Bitmap으로 만들때 사용합니다.
Bitmap _bit = BitmapFactory.decodeResource(getResources(), R.drawable.bbb);
decodeStream(InputStream is)
decodeStream(InputStream is, Rect outPadding, BitmapFactory.Options opts)
InputStream으로 부터 Bitmap을 만들때 사용합니다.
그리고 이상한 녀석이 더나오죠? 바로 BitmapFactory.Options 이라는 클래스인데요. 이녀석은 BitmapFactory의 내부클래스로써 이름처럼 옵션 설정을 합니다. 약간 특이한것이 이녀석은 Bitmap에 대한 옵션이다 보니 메소드보다는 변수를 주로 사용합니다. 한번 살펴 보겠습니다.
BitmapFactory.Options 에서 사용되는 변수
public Bitmap inBitmap
- 설정하면 비트맵 로딩시 설정한 비트맵을 재사용합니다.
public int inDensity
- 픽셀의 밀도 단위를 비트맵에 사용합니다.
public boolean inDither
- true로 설정된다면 해당이미지에 dither를 적용합니다.
public boolean inInputShareable
public boolean inJustDecodeBounds
public boolean inMutable
- true로 설정하면 불변하는 이미지를 리턴합니다.
public boolean inPreferQualityOverSpeed
- true로 설정하면 속도보다는 고품질을 수선으로 하여 디코딩 합니다.
public Bitmap.Config inPreferredConfig
- null이 아니면 내부 설정으로 디코딩합니다.
public boolean inPurgeable
public int inSampleSize
- 메모리를 절약하기 위해서 사용되며 1이상의 숫자값이 설정되면 그숫자만큼 축소시킨다.
public boolean inScaled
public int inScreenDensity
public int inTargetDensity
public byte[] inTempStorage
public boolean mCancel
- 해당 Object가 취소 되었을때는 나타내는 플래그값
public int outHeight
- 이미지의 높이를 설정합니다. 만약 디코딩중 에러가 발생하면 -1로 설정됩니다.
public String outMimeType
- 디코딩된 이미지의 MIME타입을 설정합니다.
public int outWidth
- 이미지의 폭을 설정합니다. 만약 디코딩중 에러가 발생하면 -1로 설정됩니다.
위를 보시면 비어있는 녀석들이 있죠? 여러분의 도움이 필요합니다.아시는 분들은 댓글을 달아 주시면 수정해 놓도록 하겠습니다.저는 다른 녀석들은 거의 쓰지 않구요. 메모리 효율성을 위해 inSampleSize를 가장많이 사용한답니다.
- 초보플밍 : 안드로이드 내 멋대로 그리기
- 초보플밍 : 안드로이드 Canvas
- 초보플밍 : 안드로이드 Paint
- 초보플밍 : 안드로이드 Path