问题:UIImage 旋转的问题

4

我正在为iPad开发一个iOS 6应用程序。我已经开发了一些代码来旋转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.5上。它肯定与您的矩形的大小和位置有关。当一个矩形被旋转的角度不是90度的倍数时,结果的边界框,即包围矩形的矩形,比原始矩形要大。它的左上角也会移动。您可以尝试使用drawAtPoint。因此,您无需计算围绕旋转矩形的边界框的确切框架。但是,您仍需要考虑左上角点在坐标系中的移动。 - Hermann Klecker
那我该怎么做呢? - Marti Serra Vivancos
我的意思是代码。[image drawAtPoint....] - Marti Serra Vivancos
[image drawAtPoint:CGPointMake(0,0)]; 假设左上角为 (0,0)。 - Hermann Klecker
1个回答

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();

我不工作了...现在我只能看到图像的垂直部分,就像总长度的1/8。 - Marti Serra Vivancos
@MartiSerraVivancos 对不起,昨晚我匆忙写了。我已经编辑了我的答案和发布代码。我在几个不同的图像尺寸上测试了新版本,我相当有信心它会对你有用。 - Aaron Golden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接