iOS 개발을 하다보면 화면에 직접 그림을 그리거나 이미지를 리사이즈 하거나 크롭하는등의 이미지 핸들링을 할 때가 있습니다. 이때 많은 분들이 공개되어 있는 샘플 소스를 참조하여서 프로그래밍을 하실텐데요. 대부분의 분들이 이해없이 그냥 저렇게 사용하니 그냥 습관적으로 사용하는 부분이 있습니다. 바로 CGContextTranslateCTM 와 CGContextScaleCTM 이라는 함수 입니다.
저도 그냥 샘플소스 복사해서 쓰다가, 이번기회에 이해를 좀 해보았습니다. 역시나 이해하고나니 별거 아니더라는... -_-;;;
일단 제 경우에는 문서에 나와있는 말이 좀 애매해서 문서만 보고서는 이해가 좀 힘들었습니다. 그래서 제 나름대로 정의를 내려보면 다음과 같습니다.
void CGContextTranslateCTM ( CGContextRef c, CGFloat tx, CGFloat ty );
컨텍스트 좌표의 원점(0,0)을 x , y 크기 만큼 이동 시켜 줍니다.
예를 들어
CGContextTranslateCTM(context, 0.0, 480);
이라고 사용하면 일반적으로 iOS 에서 사용하는 좌표의 원점인 왼쪽 위의 원점이 왼쪽 아래로 잡히게 됩니다.
void CGContextScaleCTM ( CGContextRef c, CGFloat sx, CGFloat sy );
컨텍스트 x,y 좌표의 +,- 방향을 바꾸고 좌표계의 비율을 변경 해 줍니다.
예를 들어
CGContextScaleCTM(context, 1.0, -1.0);
이라고 사용하면 X,Y 축의 비율은 1.0으로 동일하고, Y 축 좌표가 아래에서 위로가는 방향이 + 방향으로 변경됩니다.
예제코드를 통해서 확실히 의미를 이해해 보도록 하겠습니다.
위와 같이 코드를 작성하면 결과는 다음과 같이 됩니다.
이미지도 Quartz 로 불러온것이기 때문에 Quartz 좌표계를 따르는데요, 이때문에 위 두 함수를 적용하지 않은채 컨텍스트에 그림을 그리면 이미지가 상하 반전되어서 나오게 됩니다. 따라서 좌표계를 반전 시켜주시고 그림을 그리면 원상태로 나오게 되는것이지요.
Quartz 의 좌표의 원점은 왼쪽 아래고, + 방향은 위쪽과 오른쪽 입니다. 이점을 먼저 인지 하시고 위 함수들의 변수값을 조정하시면서 테스트를 해보시면 좀더 이해가 빨리 됩니다.
'개발&팁 > Mac & Cocoa & iPhone' 카테고리의 다른 글
xcode3 에서 Target 을 이용한 프로젝트 관리 (3) | 2011.02.23 |
---|---|
UIViewController 의 viewDidUnload 가 불리는 시점. (5) | 2011.02.19 |
CGContextTranslateCTM 와 CGContextScaleCTM 의 이해. (5) | 2010.10.13 |
iOS 3.0 과 4.0 에서의 이미지 불러오기. (0) | 2010.09.07 |
imageNamed 와 imageWithContentsOfFile 의 차이. (2) | 2010.08.13 |
xcode 환경에서 디버깅 로그함수 편리하게 관리하기 (1) | 2010.04.09 |
댓글을 달아 주세요
매우 지원, 아주 좋아.
설마 당신의 그 사람이 당신의 방식대로 당신을 사랑해주지 않는다하여 당신을 사랑하지 않는 것은 아닙니다.
그런 다음 먼 길, 단계적으로는 발에 연결할 수 없습니다 데려 갈 수 없어, 다음 짧은 방법을 완료 할 수 있습니다.
모든 사람은 죽는다. 하지만 모든 사람이 진정한 삶을 사는 건 아니다.
진정한 자신감, 사람들 처음부터 맹인 신뢰 대한 열등감 중간에서 자신감을 사실에 더 자신감이 없습니다.