본문 바로가기

프로그래밍/Android

이미지 클리핑 기초

 

간만에 안드로이드 관련 포스팅~

 

이미지 클리핑..

 

이미지를 표시하다보면 특정 부분만 표시하거나 특정 모양으로 표시해야 할 필요가 있다.

예를 들어 mp3 썸네일 이미지를 CD 처럼 보이고자 한다면 원형모양으로 이미지를 잘라 주어야

한다.

바깥부분과 안쪽 원을 제거해주어야 하는데, 이러한 처리는 마스크 이미지를 통한 색상 오퍼레이션이나

캔버스의 클리핑 기능으로 구현할 수 있다.

 

이중 간단한 캔버스의 클리핑에 대해 간단히 정리한다.

 

 

1. 이미지 불러오기

Bitmap srcImage = BitmapFactory.decodeFile("imageFileWithPath");

int width = srcImage.getWidth();

int height = srcImage.getHeight();

 

2. 백버퍼 만들기

Bitmap backBuffer = Bitmap.createBitmap( width, height, Config.ARGB_8888);

 

3. 캔버스 만들기

Canvas newCanvas = new Canvas( backBuffer );

 

4. 클리핑 영역 지정 : path를 사용해 영역을 지정한다.

ccw : 해당 클리핑 영역이 표시되도록 한다.

cw : 해당 클리핑 영역이 제거되도록 한다.

* CD의 정확한 사이즈 규격을 몰라 임의대로 입력했음.

 

Path 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 );

 

5. 백버퍼에 이미지 그리기

// 기존의 클립정보나 매트릭스 보관

newCanvas.save();

newCanvas.clipPath(clip);

 

// 이미지 그리기

newCanvas.drawBitmap( srcImage, 0, 0, null );

newCanvas.restore();

 

// 원본 이미지 제거

srcImage.recycle();

srcImage = null;

 

6. 생성된 backBuffer 를 ImageView 등에 담아 사용..

 

 

기본적인 클리핑은 캔버스에서도 지원하고 있다.

 

Path에는 원이나 부채꼴, 사각형등 다양한 도형을 지원하고, Matrix도 지원하고 있어

다양한 모양을 만들어 낼 수 있다.

 

 

끝.

'프로그래밍 > Android' 카테고리의 다른 글

MediaStore 오디오 재생목록  (0) 2011.09.17
List adapter  (0) 2011.09.15
낙서  (0) 2011.09.07
터치 이벤트 처리순서  (0) 2011.09.01
천천히 로딩되는 리스트 아이템  (0) 2011.08.22
ffmpeg 빌드 #3  (0) 2011.07.07
ffmpeg 빌드 #2 ffmpeg 옵션별 빌드  (0) 2011.07.06
ffmpeg 라이브러리 빌드 #1  (0) 2011.06.30
Drag&drop listview  (0) 2010.10.06
뷰 전환시 3차원 에니메이션 적용하기  (0) 2010.09.17