2013-03-10 188 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的大小和位置有关。当然,当矩形旋转90度以外的其他角度时,所产生的边界框(包围矩形)比原始矩形大。它的左上角也会移动。您可以尝试使用drawAtPoint。因此,您不需要计算围绕旋转矩形的边界框的确切框架。但是您仍然需要考虑坐标系内左上点的移动。 – 2013-03-10 15:09:14

+0

那我该怎么做? – 2013-03-10 15:40:45

+0

我的意思是代码。 [image drawAtPoint .... – 2013-03-10 18:07:04

回答

1

您需要使图形上下文足够大,以便旋转图像。您正在使用image.size,但应该使用旋转后的大小作为UIGraphicsBeginImageContext的参数。此外,您的drawInRect参数不正确。您需要用以下方式偏移(旋转的)原点x,它决定了最终图像的y原点:“向上”原始高度的一半(这使得最终图像完全离开绘图上下文的顶部),然后以完整的原始宽度“下”,这是最终的图像高度。

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。 – 2013-03-15 15:14:15

+0

@MartiSerraVivancos对不起,昨天晚上我写了匆忙。我编辑了我的答案和定位代码。我已经在几种不同的图像尺寸上测试了新版本,我相信它会适用于您。 – 2013-03-15 17:27:10

+0

我工作完美!谢谢 :) – 2013-03-15 21:39:10