裁剪旋转的 UIImage
Posted
技术标签:
【中文标题】裁剪旋转的 UIImage【英文标题】:crop a rotated UIImage 【发布时间】:2013-02-03 11:37:32 【问题描述】:我遇到了这里描述的确切问题:
crop a rotated UIImage.
我需要,但是,当我尝试解决方案时,它不会裁剪图像
UIView *rotatedViewBox = [[UIView alloc] initWithFrame:videoPreviewView.frame];
NSLog(@"frame width: %f height:%f x:%f y:%f",videoPreviewView.frame.size.width, videoPreviewView.frame.size.height,videoPreviewView.frame.origin.x,videoPreviewView.frame.origin.y);
rotatedViewBox.transform = CGAffineTransformMakeRotation(90 * M_PI / 180);
CGSize rotatedSize = rotatedViewBox.frame.size;
UIGraphicsBeginImageContext(rotatedSize);
CGContextRef bitmap = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(bitmap, rotatedSize.width / 2.0f, rotatedSize.height / 2.0f);
CGContextRotateCTM(bitmap, 90 * M_PI / 180);
CGContextScaleCTM(bitmap, 1.0f, -1.0f);
CGContextDrawImage(bitmap, CGRectMake(-videoPreviewView.frame.size.width / 2.0f,
-videoPreviewView.frame.size.height / 2.0f,
videoPreviewView.frame.size.width,
videoPreviewView.frame.size.height),
image.CGImage);
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
日志是: 框架宽度:310 高度:310 x:0 y: 69
虽然旋转有效,但新图像未在旧图像的 0,69,310,310 处裁剪。
【问题讨论】:
“不起作用”什么也没告诉我们。请提供更多详细信息。 我更新了问题 - 它根本不裁剪图像。只有旋转有效 【参考方案1】:您使用的“解决方案”虽然被接受,但也带有 OP 评论“但它不起作用。”
该解决方案仅声称处理问题的轮作部分,而不是作物。它正在做它声称要做的事情,但仅此而已。
这是一个执行裁剪的 CG 函数:
CGImageRef CGImageCreateWithImageInRect (
CGImageRef image,
CGRect rect
);
输入您的图像和要裁剪到的区域的矩形。
在此处查看答案以获取示例用法:Cropping an UIImage
【讨论】:
OP 在哪里说它不起作用?我怎样才能使它基于这个解决方案工作?因为 CGContextDrawImage 应该在另一个内部绘制和图像不是吗? @Odelya,对不起,我看错了 - 那是 你的 评论它不起作用!我已经更新了答案 那行不通。因为它没有考虑方向(用户在方向改变之前裁剪了图像) - 我怀疑它是否会起作用,但我现在会给它一个机会 正如我所想 - 裁剪不起作用。这就是为什么之前的 OP 发布了他的问题 - 旋转裁剪的图像 @Odelya,也许我不明白你想做什么。如果您将问题中的代码转换为“旋转”方法,将我的答案中的代码转换为“裁剪”方法,将旋转方法应用于您的输入图像,然后应用裁剪方法,您将获得旋转、裁剪的结果。这回答了你的问题,“我需要裁剪一个旋转的 UIImage”。在您的评论中,您首先谈到作物,其次是轮换。只需颠倒两种方法的顺序即可。如果这仍然不能回答您的问题,您可以更新它以更好地解释您正在尝试做什么以及什么不起作用。以上是关于裁剪旋转的 UIImage的主要内容,如果未能解决你的问题,请参考以下文章