본문 바로가기

Android/Bitmap

안드로이드/Android Bitmap 정리~!

안드로이드/Android Bitmap 정리~!




안드로이드 Bitmap


Bitmap 상속 계층도

java.lang.Object

└─ android.graphics.Bitmap


Bitmap 은 머야?

안드로이드에서 이미지를 표현하기 위해 사용되는 녀석이 Bitmap입니다. 

Bitmap와 같이 봐야될 녀석은 BtimapFactory클래스 인데 이름에서 알수 있듯이 "Factory" 공장입니다. 바로 Bitmap를 만들어 주는 녀석이죠. 안드로이드에서 사용자가 원하는 이미지를 코드상에 넣을려면 해당 이미지는 /res/drawable-xxxx/ 곳에 넣으시면 됩니다. 권장하는 확장자는 png이지만 jpg도됩니다. 

파일을 넣으실때 주의 하셔야 될것은 파일이름은 영어소문자, _(언더바) 만 사용가능하다는거 잊지마세요.


BitmapFactory 에서 사용되는 메소드

  1. 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 에서 사용되는 변수

  1. 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를 가장많이 사용한답니다.





Bitmap 이외의 초보플밍님 강좌 입니다. 강의가 참 좋습니다.~!!