728x90

Bitmap 이란?

 

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

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

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

 

Bitmap 에서 사용되는 메소드

 

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로 설정된다.

  •  

    728x90

    'Android' 카테고리의 다른 글

    안드로이드 입력 (이벤트)  (0) 2012.07.31
    안드로이드 Path  (0) 2012.07.31
    안드로이드 페인트 (Paint)  (0) 2012.07.27
    안드로이드 캔버스 (Canvas)  (0) 2012.07.27
    안드로이드 AbsoluteLayout, FrameLayout, TableLayout  (0) 2012.07.27
    Posted by 정망스
    ,
    728x90

    Paint 란?

     

    그리기(Draw)하기위해 쓰여지는 도구

    쉽게 말해 Canvas가 도화지라면 Paint는 붓이라고 생각하면 된다.

     

    Paint 에서 사용되는 메소드

     

    set(Paint src)                                

  •         - 매개변수로 받은 Paint로 설정한다.


    setARGB(int a, int r, int g, int b)   

            - Paint의 투명도 및 색상을 설정 한다.


    setAlpha(int a)                       

            Paint의 투명도 설정을 한다. 


    setAntiAlias(boolean aa)             

            Paint의 경계면을 부드럽게 처리할지 설정한다.


    setColor(int color)                      

            Paint의 색상 설정 한다.


    setStrokeCap(Paint.Cap cap) 선의 끝나는 지점의 장식을 설정한다.

        BUTT : 그 정해진 위치에서 끝난다.

        ROUND : 둥근 모양으로 끝이 장식된다.

        SQUARE : 사각형 모양이며, 해당 좌표보다 조금더 길게 그려 진다.

    setStrokeJoin(Paint.Join join) - 선의 끝 모양을 설정한다.

        MITER : 모서리를 각진 모양으로 만든다.

        BEVEL : 모서리가 둥글게 살짝 깍인 모양으로 만든다.

        ROUND : 모서리를 둥근 모양으로 만든다.

    setStrokeMiter(float miter)    

            - 0 이상의 값을 설정, 뽀족한 정도를 설정(각도단위)


    setStrokeWidth(float width)    

            - Paint의 굵기를 설정 한다.


    setStyle(Paint.Style style) - Paint 스타일을 설정 한다.

        FILL : 색상이 채워지고 테두리는 그려지지 않는다.

        FILL_AND_STROKE : 채우기와 테두리가 모두 그려진다

        STROKE : 채우기 없이 테두리만 그려진다.


    setTextAlign(Paint.Align align)    

            - 해당 Paint의 글자 정렬을 설정 한다.


    setTextScaleX(float scaleX)          

            - 텍스트페인트의 수평scale factor 를 설정한다.


    setTextSize(float textSize)                    

            - Paint의 글자 크기를 설정한다.


    setTextSkewX(float skewX)           

            - Paint의 수평으로 기울어진 정도를 설정한다.


    setTypeface(Typeface typeface)    

            - Paint의 글꼴을 설정 한다.


    setUnderlineText(boolean underlineText) 

            - Paint의 글자에 밑줄 설정을 한다.


    setColorFilter(ColorFilter filter)     

            - RGB를 이용하여 paint에 변화를 준다. 이것은 Alpha를 무시 한다.   

    setMaskFilter(MaskFilter maskfilter)

            - 모서리에 알파채널을 이용하여 효과를 설정한다.


    setPathEffect(PathEffect effect)

            - 그리는 방법을 제어 한다.(도형의 모서리, 윤곽선등)


    setShader(Shader shader)

            - 솔리드에 색상을 설정해 준다. 그라디언트등


    setXfermode(Xfermode xfermode)

            - 이미 그려진 곳에 새로 그리는 기법.

  • 728x90
    Posted by 정망스
    ,
    728x90

    Canvas 란?

     

    그리기(Draw)하기위해 쓰여지는 도구

    안드로이드에서 그림을 그릴때 사용되는 클래스이며 도화지라고 생각하면 된다.

    그래서 Canvas에 있는 메소드들은 대부분 그리기는 메소드 drawXXXX() 들이 대부분 존재 하고 있다.

     

    Canvas 에서 사용되는 메소드

     

     

    ▶ 각종 도형을 그리는 메소드

    drawPoint(float x, float y, Paint paint)        

                 - 해당 좌표(x, y)에다가 paint로 점을 그린다


    drawLines(float[] pts, Paint paint)             

                 - 배열로 넘어온 pts를 따라서 paint로 선을 그린다.


    drawCircle(float cx, float cy, float radius, Paint paint)            

                - 주어진 두점(cx, cy)를 중심으로 반지름(radius)만큼 paint로 원을 그린다.


    drawRect(float left, float top, float right, float bottom, Paint paint) 

                - 좌,우,상,하 위치에 딱 맞는 사각형을 paint로 그린다.


    drawRoundRect(RectF rect, float rx, float ry, Paint paint)     

                - 모서리가 둥근 사각형을 paint로 그립니다. rx, ry는 모서리가 둥근 정도를 설정한다.


    drawOval(RectF oval, Paint paint) 

                - 사각형 안에 딱 맞는 원을 paint로 그린다.


     drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint) 

                - 사각형 영역(oval)  안에서 두각(atartAngle, sweepAngle) 사이의 호를 그린다.


     ▶ Canvas 배경 관련 메소드

    drawARGB(int a, int r, int g, int b) 

                - Canvas(배경)에 한가지색으로 Canvas를 칠한다. 

                - a : 투명, R : 레드, G : 그린, B :  블루


    drawRGB(int r, int g, int b) 

                - Canvas(배경)에 한가지색으로 Canvas를 칠한다. 


    drawColor(int color) 

                - Canvas(배경)에 한가지색으로 Canvas를 칠한다. 

                    - RGB대신에 16진수 숫자를 넣으시면 됩니다. ex) 0xFFAA76


    drawPaint(Paint paint) 

                - Canvas(배경)에 Paint의 설정대로 칠한다.


     ▶ Bitmap를 그리는 메소드

    drawBitmap(Bitmap bitmap, float left, float top, Paint paint) 

        - Bitmap을 주어진 좌표(left, top)를 좌측 상단에 맞추어 paint로 그린다.

     ▶ 경로(path), 글자(text)를 그리는 메소드

    drawPath(Path path, Paint paint)    

            - 주어진 경로(path)대로 그린다.


    drawText(String text, float x, float y, Paint paint) 

            - 해당 좌표(x, y) 에 문자(text)를 그린다.


    drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint) 

             - 주어진 경로(path)위해 글자를 그린다.


     ▶ Canvas 자체 속성 관련 메소드

    restore() 

        - Canvas상태를 복원 한다.


    rotate(float degrees) 

        - Canvas를 주어진 각(degrees)만큼 회전 한다.


    save() 

        - 현재 Canvas상태를 저장한다.

    728x90
    Posted by 정망스
    ,
    728x90

    1.AbsoluteLayout

     

    의미상으로 RelativeLayout의 반대 속성을 가지는 레이아웃이다. 관계나 순서상에 상관없이 지정한 절대 좌표에 차일드 뷰를 배치한다.

     

    차일드 뷰의 좌표를 layout_x, layout_y 속성으로 지정해 놓으면 부모의 좌상단을 기준으로 한 좌표에 뷰가 배치된다.

     
    장비의 해상도나 방향이 수시로 바뀔 수 있는 모바일 환경에서는 유연하지 못하고 관리하기도 어렵다. 그래서 공식 문서에는 AbsoluteLayout을 사용하지 말라고 되어 있으며 제공되지 않는 레이아웃이라고 생각해도 무방하다.

     


    <AbsoluteLayout>
      <TextView android:layout_x="50px" android:layout_y="100px" android:text="(50, 100)" />
      <TextView android:layout_y="200px" android:layout_y="70px" android:text="(200, 70)" />
    </AbsoluteLayout>


    2.FrameLayout

     

    형태상으로 모든 레이아웃중에 가장 단순하다. 차일드를 배치하는 규칙이 따로 없고 모든 차일드는 프레임의 좌상단에 나타난다. 차일드가 두 개 이상일 때는 추가된 순서대로 겹쳐서 표시된다.

     

     

     

     

    Visibility를 사용하여 이미지 출력을 조정한다.

     

    3. TableLayout


    표 형식으로 차일드를 배치하는 레이아웃이다.


    테이블은 임의 개수의 TableRow 객체로 구성되며 TableRow 객체 하나가 곧 행이다. TableRow 안에는 임의 개수의 열이 배치되는데 행 안의 열 하나를 셀이라고 부르며 셀에는 차일드 뷰 하나가 들어간다. TableRow 개수가 곧 가로 행의 개수이며 TableRow 안에 배치되는 뷰의 개수가 곧 세로 열의 개수가 되고 테이블의 전체 크기는 행*열이 된다.

    TableRow 객체의 높이는 항상 wrap_content로 강제된다.
    셀에 배치되는 자식 뷰는 무조건 주어진 셀 안에 배치되므로 layout_width 속성은 따로 지정할 수 없으며 항상 fill_parent로 가정된다.
    차일드 뷰의 높이는 디폴트로 wrap_content로 되어 있지만 원한다면 셀 안을 가득 채울 수는 있다.

     

     

    728x90
    Posted by 정망스
    ,
    728x90

    RealtiveLayout은 자식뷰의 위치를 상대적으로 배치해주는 역할을 한다.

     

    뷰의 배치 방법은 형제 요소에 대해 상대적으로 지정하는 방법과 부모뷰 영역에 상대적인 위치를 지정하는 방법으로 나눌 수 있다.

     

    RealtiveLayout은 중첩된 형태의 뷰구성이 가능하기 때문에 사용자 인터페이스를 만들 때 굉장이 유용하게 쓰인다.

     

    Realtive의 주요 속성.

     

    layout_above : ~의 위에 배치한다.

    layout_below : ~의 아래에 배치한다.

    layout_toLeftOf : ~의 왼쪽에 배치한다.

    layout_toRightOf : ~의 오른쪽에 배치한다.

     

    layout_alignLeft : ~와 왼쪽 변을 맞춘다.

    layout_alignTop : ~와 위쪽 변을 맞춘다.

    layout_alignRight : ~와 오른쪽 변을 맞춘다.

    layout_alignBottom : ~와 아래쪽 변을 맞춘다.

     

    layout_alignParentLeft : true이면 부모와 왼쪽 변을 맞춘다.

    layout_alignParentTop : true이면 부모와 위쪽 변을 맞춘다.

    layout_alignParentRight : true이면 부모와 오른쪽 변을 맞춘다.

    layout_alignParentBottom : true이면 부모와 아래쪽 변을 맞춘다.

     

    layout_alignBaseLine : ~와 베이스라인을 맞춘다.

     

    layout_alignWithParentIfMissing : layout_toLeftOf 등의 속성에 대해 앵커가 발견되지 않으면 부모를 앵커로 사용한다.

     

    layout_centerHorizontal : true이면 부모의 수평 중앙에 배치한다.

    layout_centerVertical : true이면 부모의 수직 중앙에 배치한다.

    layout_centerInParent : true이면 부모의 수평, 수직 중앙에 배치한다.

     

    Realtive 정렬은 크게 형제뷰 기준, 부모뷰 기준으로 정렬 이렇게 두가지로 나뉜다.

     

     

     

     

     

     

     

     

     

     

    728x90
    Posted by 정망스
    ,


    맨 위로
    홈으로 ▲위로 ▼아래로 ♥댓글쓰기 새로고침