2013-03-10 2 views
4

iPad 용 iOS 6 앱을 개발 중입니다. 나는 UIImage을 회전시키는 코드를 개발했다. 정사각형 이미지와 잘 맞지만 이미지가 정사각형이 아닌 경우 잘립니다. 따라서 이미지의 일부 (사각형) 만 볼 수 있습니다.문제 회전 UIImage

내 코드 :

UIGraphicsBeginImageContext(image.size); 

CGContextRef context = UIGraphicsGetCurrentContext(); 

CGContextTranslateCTM(context, 0.5f * image.size.width, 0.5f * image.size.height) ; 
CGContextRotateCTM(context, -1.5707963267949) ; 

[image drawInRect:(CGRect){ { -imatgetemporal.size.width * 0.5f, -image.size.height * 0.5f }, image.size }]; 

UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext(); 

나는 문제가 0.5F에 생각하지만, 나는 그것을 해결하는 방법을 모르겠어요. 어떻게해야합니까?

+0

문제는 0.5 일 수 있습니다. 확실히 rect의 크기와 위치와 관련이 있습니다. 당연히 rect가 90 도의 승수가 아닌 다른 각도로 회전 될 때 그 결과로 나타나는 경계 상자 인 enclosing rectangle은 원본보다 큽니다. 그것의 좌상단 구석도 움직입니다. 대신 drawAtPoint를 사용해보십시오. 따라서 회전 된 사각형 주위의 경계 상자의 정확한 프레임을 계산할 필요가 없습니다. 그러나 여전히 좌표계 내에서 왼쪽 상단 점의 이동을 고려해야합니다. –

+0

그럼 내가 어떻게 할 수 있니? –

+0

코드를 의미합니다. [image drawAtPoint .... –

답변

1

회전 된 이미지에 사용할 그래픽 컨텍스트를 충분히 크게 만들어야합니다. image.size를 사용하고 있지만 회전 된 크기를 UIGraphicsBeginImageContext의 인수로 사용해야합니다. 또한 drawInRect 인수가 잘못되었습니다. 다음과 같은 방법으로 최종 이미지의 y 원점을 결정하는 (회전 된) 원점 x를 오프셋해야합니다. 원래의 높이의 절반만큼 "위로"(최종 이미지를 전체적으로 도면 컨텍스트의 상단에서 벗어남) 다음 원본 이미지 너비 인 전체 원본 너비로 "아래로"이동합니다.

const CGSize imageSize = image.size; 
UIGraphicsBeginImageContext(CGSizeMake(imageSize.height, imageSize.width)); 

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextTranslateCTM(context, 0.5f * imageSize.width, 0.5f * imageSize.height) ; 
CGContextRotateCTM(context, -1.5707963267949) ; 
[image drawInRect:(CGRect){ { imageSize.height * 0.5 - imageSize.width, -imageSize.width * 0.5f }, imageSize }]; 

UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext(); 
+0

나는 작동하지 않습니다 ... 이제 전체 길이의 1/8처럼 이미지의 수직 부분 만 볼 수 있습니다. –

+0

@ MartiSerraVivancos 죄송합니다, 어젯밤에 급히 썼습니다. 내 대답과 긍정적 인 코드를 편집했습니다. 몇 가지 다른 이미지 크기로 새 버전을 테스트했으며이 버전이 제대로 작동 할 것이라고 확신합니다. –

+0

나는 완벽하게 일했습니다! 감사 :) –