'CGContextTranslateCTM'에 해당되는 글 1건

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 의 좌표의 원점은 왼쪽 아래고, + 방향은 위쪽과 오른쪽 입니다. 이점을 먼저 인지 하시고 위 함수들의 변수값을 조정하시면서 테스트를 해보시면 좀더 이해가 빨리 됩니다. 

저작자 표시 동일 조건 변경 허락
신고
블로그 이미지

하루하루

하루하루를 열심히 살아가는 그런 사람이 되고자 합니다. 오늘을 후회없이 말이지요.

티스토리 툴바