IT/Android (안드로이드)

Android N.3-4 Clipping Canvas Objects

Edmond Na 2025. 4. 21. 23:25
      1. 31 작성

#0 클립 영역이란?

클립영역은 현재 캔버스에서 일부 영역만 출력을 하고 싶을때, 이 클립영역을 캔버스 객체에 지정해 주면, 현재 캔버스에 그리는 내용중에 그 영역에 해당되는 부분만 출력이 되게 됩니다.

예를 들어 mp3 썸네일 이미지를 CD 처럼 보이고자 한다면 원형모양으로 이미지를 잘라 주어야 합니다.
바깥부분과 안쪽 원을 제거해주어야 하는데, 이러한 처리는 마스크 이미지를 통한 색상 오퍼레이션이나 캔버스의 클리핑 기능으로 구현할 수 있다.

#1 Clipping 사용법

  1. 이미지 불러오기
val srcImage = BitmapFactory.decodeFile("imageFileWithPath")
val width = srcImage.getWidth()
val height = srcImage.getHeight()
  1. 백버퍼 만들기
val backBuffer = Bitmap.createBitmap(width, height, Config.ARGB_8888)
  1. 캔버스 만들기
val newCanvas = Canvas(backBuffer)
  1. 클리핑 영역 지정 : path를 사용해 영역을 지정한다.
    ccw : 해당 클리핑 영역이 표시되도록 한다.
    cw : 해당 클리핑 영역이 제거되도록 한다.
val clip = new Path();

// CD 외곽모양
clip.addCircle((float) width/2, (float) height/2, width/2, Path.Direction.CCW);

// 내부 원 지우기
clip.addCircle((float) width/2, (float) height/2, width/8, Path.Direction.CW );
  1. 백버퍼에 이미지 그리기
// 기존의 클립정보나 매트릭스 보관
newCanvas.save();
newCanvas.clipPath(clip);

// 이미지 그리기
newCanvas.drawBitmap( srcImage, 0, 0, null );
newCanvas.restore();

// 원본 이미지 제거
srcImage.recycle();
srcImage = null;