自定义角度的UIImage旋转

8

1
我建议在这里加一个 iPhone 标签... - Andrew Pouliot
很棒的代码。虽然它不执行任意旋转,但它效率高且能很好地处理图像方向与镜像。 - Tod Cunningham
1个回答

14

你需要做的就是和这篇文章中在旋转方面所做的基本相同的事情:

CGSize size = sizeOfImage;
UIGraphicsBeginImageContext(size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextRotateCTM(ctx, angleInRadians);
CGContextDrawImage(ctx, (CGRect){{}, size}, image);

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;

在旋转图像时,除了补偿旋转中心外,您可能还需要将CTM进行翻译。如果您不想在旋转时裁剪图像的边缘,则应使用一些基本三角函数来增加其大小。


1
ctx 只是图形上下文。我已经更新了源代码来指示它。 - Andrew Pouliot
@AndrewPouliot:这非常棒。但是我如何设置图像的旋转中心? - Shantanu
@Shantanu: CGContextTranslateCTM(ctx, -centerOfRotation.x, -centerOfRotation.y),旋转,然后CGContextTranslateCTM(ctx, centerOfRotation.x, centerOfRotation.y)。 - Andrew Pouliot
为什么要使用UIGraphicsGetCurrentContext()存储当前图形上下文的引用,然后在两行代码后再次运行UIGraphicsGetCurrentContext() - user577537
UIGraphicsGetImageFromCurrentImageContext() 返回 nil,因此图像也是 nil。你会如何解决这个问题? - coolcool1994

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