0

로 이미지를 그립니다하지만 내가 함께 시도했다 CGContextConcatCTM내가 <code>CGAffineTransform</code>에있는 UIImage을 그리려는 CGAffineTransform 및 CGContextDrawImage

잘못 출력을 제공 코드 아래 :

CGAffineTransform t = CGAffineTransformMake(1.67822, -1.38952, 1.38952, 1.67822, 278.684, 209.129); // transformation of uiimageview 
UIGraphicsBeginImageContext(CGSizeMake(1024, 768)); 
CGContextRef imageContext = UIGraphicsGetCurrentContext(); 
CGContextDrawImage(imageContext, dragView.frame, dragView.image.CGImage); 
CGContextConcatCTM(imageContext, t); 

NSLog(@"\n%@\n%@", NSStringFromCGAffineTransform(t),NSStringFromCGAffineTransform(CGContextGetCTM(imageContext))); 

출력 :

[1.67822, -1.38952, 1.38952, 1.67822, 278.684, 209.129] // imageview transformation 
    [1.67822, 1.38952, 1.38952, -1.67822, 278.684, 558.871] // drawn image transformation 

CGAffineTransform CGAffineTransformMake (
    CGFloat a, 
    CGFloat b, 
    CGFloat c, 
    CGFloat d, 
    CGFloat tx, 
    CGFloat ty 
); 

매개 변수 b, d 및 ty가 변경되었습니다. 어떻게 해결할 수 있습니까?

+0

처음에 그 값에 어떻게 도달 했습니까? –

+0

또한 이미지가 거꾸로 표시 되는가 (그렇지 않으면 잘못 된 방향으로 돌아가는가) 아니면 걱정스러운 로그 출력입니까? –

+0

네, 그냥 로그 출력 – Nikkie

답변

1

해결할 문제가 없습니다. 로그 출력이 정확합니다.

두 행렬 비교, 둘 사이의 차이점이있다 :

  • 스케일 수직 -1 (제 4 명 두 영향을 미치는)
  • 마지막에 영향을 미친다 (349.742로 수직 변환 회원)

나는 대략 350 포인트의 키가 있다고 생각합니다. 내가 맞습니까? 실제로 컨텍스트의 높이를 768로 설정했기 때문에 349.742가 이상합니다. 이 거의입니다. 앵커 포인트가 중앙에 위치했기 때문일 수도 있지만, 짧지 만 상태 표시 줄을 잘라내는 것이 좋지 않습니다. 68.516 포인트 차이를 설명하지 않을 것이다). 그래서 그것은 수수께끼입니다. 하지만 다음은 여전히 ​​사실입니다.

가로 눈금 및 변환은 how you would flip a context입니다. 이 문맥은 좌하 원점에서 좌상 원점으로, 또는 그 반대로 이동했습니다.

전에 전에 (설명되지 않은, 하드 코딩 된) 행렬을 연결했습니다. 사용자가 상황을 직접 바꾸지 않았다고 가정하면 아마도 UIKit 구현 세부 사항으로 추측됩니다.

병합 (CGContextConcatCTM에서와 같이)은 이전 변환 행렬을 새로운 것으로 대체하지 않습니다. 행렬 곱셈입니다. 나중에 가지고있는 행렬은 시작한 행렬과 그 행렬에 연결 한 행렬의 결과입니다. 결과 행렬은 플립 된 다음 행렬이 무엇이든 상관없이 뒤집 힙니다.

CTM을 매트릭스에 연결하기 전에 CTM을 가져 와서 로깅하면됩니다. 다음을 참조하십시오 :

[0, -1, 0, -1, 0, 349.742] 

“The Math Behind the Matrices” in the Quartz 2D Programming Guide도 참조하십시오.