이미지 처리, Canvas,Paint,Bitmap,Drawable

CODEDRAGON Development/Android

반응형

   

그래픽 주요 클래스

속성

설명

Canvas

뷰의 표면에 직접 그릴 수 있도록 만들어 주는 객체로 그래픽 그리기를 위한 메서드가 정의되어 있습니다.

Paint

그래픽 그리기를 위해 필요한 색상 등의 속성을 담고 있습니다.

Bitmap

픽셀로 구성된 이미지로 메모리 상에 그래픽을 그리는 데 사용됩니다.

Drawable

사각형, 이미지 등의 그래픽 요소가 객체로 정의되어 있습니다.

   

   

그리기 관련 주요 메서드 

속성

설명

점 그리기

void drawPoint(float x, float y, Paint paint)

하나의 점을 그림. drawPoints()를 이용하면 여러 개의 점을 그릴 수 있습니다.

선 그리기

void drawLine(float startX, float startY, float stopX, floatY, Paint paint)

두 점의 x, y 좌표값을 이용해 선을 그립니다.

drawLines()를 이용하면 여러 개의 선을 그릴 수 있습니다.

사각형 그리기

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

모서리의 자표값을 이용해 사각형을 그립니다.

둥근 모서리의 사각형 그리기

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

사각 영역과 모서리 부분 타원의 반지름 값을 이용해 둥근 모서리의 사각형을 그립니다.

원 그리기

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

원의 중앙 좌표값과 반지름을 이용해 원을 그립니다.

타원 그리기

void drawOval(RectF oval, Paint paint)

사각 영역을 이용해 타원을 그립니다

아크 그리기

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

사각 영역과 각도를 이용해 아크를 그립니다

패스 그리기

void drawPath(Path path, Paint paint)

패스 정보를 이용해 연결선 또는 부드러운 곡선을 그립니다

비트맵 그리기

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

비트맵 이미지를 주어진 좌표값에 그립니다

   

   

그래픽 그리기 단계

1

새로운 클래스 생성 후 View를 상속

2

Context객체 하나를 파라미터로 가지는 생성자 정의

3

그리기 객체 초기화 및 필요한 속성 설정

4

onDraw()메소드 내에서 그리기 객체 호출

5

onTouch()메소드 내에서 터치 이벤트 처리

6

새로 만든 View클래스를 메인 액티비티에 추가

   

XML레이아웃에 새로 생성한 View를 element로 직접 지정 시

XML레이아웃에 새로 생성한 View를 element로 직접 지정 시 반드시 아래 생성자를 정의해 주어야 합니다.

//XML에 element로 지정시 반드시 아래 생성자 정의

public MyView(Context context, AttributeSet attributeSet){

super(context, attributeSet);

}

   

메인 액티비티에 추가할 때 소스 코드

new연산자를 통해 객체를 생성한 후 setContentView()메소드로 화면 전체에 보여줍니다.

MyView myView = new MyView(this);

setContentView(myView);

   

그리기 메소드

onDraw()

뷰가 화면에 디스플레이될 때 자동으로 호출됩니다.

onTouch()

터치 이벤트를 처리합니다.

   

   

Canvas 와 Paint 다루기

 

Canvas

Canvas(android.graphics.Canvas)는 직사각형 영역에 뭔가를 그리는 수단들을 제공합니다.

Paint

Paint 클래스는 스타일과 복합 색 및 렌더링 정보를 캡슐화합니다.

 

설정

메소드

색상 설정

setColor(Color.RED)

안티앨리어싱 설정

New Paint(Paint.ANTI_ALIAS_FLAG)

스타일 설정

setStyle(Paint.Style.STROKE)

외곽선만 나타나고 색이 채워지지 않음

그래디언트 설정

setShader()

   

 

도형 그리기

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(new MyCanvas(this));

}

private class MyCanvas extends View{

 

public MyCanvas(Context context) {

super(context);

}

protected void onDraw(Canvas canvas){

canvas.drawColor(Color.WHITE);

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

paint.setColor(Color.BLUE);

 

//원

canvas.drawCircle(100,100,50,paint);

 

paint.setColor(Color.YELLOW);

//사각형

canvas.drawRect(200, 200, 300, 300, paint);

}

}

   

 

비트맵 이미지 처리

 

비트맵 이미지 그리기

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);

canvas.drawBitmap(bitmap, 0, 0, null);

   

비트맵 이미지 크기 조정하기

bitmap2=Bitmap.createScaledBitmap(bitmap,100,80,false);

canvas.drawBitmap(bitmap2, 0,300, null);

   

비트맵 이미지가 사용한 메모리 해지하기

bitmap.recycle();

bitmap2.recycle();

 

SDCard에서 비트맵 이미지 읽기

File file=new File(Environment.getExternalStorageDirectory(),fileName);

FileInputStream fis=null;

try{

fis=new FileInputStream(file);

}catch(FileNotFoundException e){}

Log.d("error",String.format("[%s] is not found",fileName));

return;