Objective c 从uiimageview获取旋转的图像

Objective c 从uiimageview获取旋转的图像,objective-c,ios,uiimage,core-graphics,cgaffinetransform,Objective C,Ios,Uiimage,Core Graphics,Cgaffinetransform,我创建了一个应用程序,在其中我可以使用手势旋转、重新调整大小和翻译图像。然后我需要从UIImageView获取图像。我在堆栈溢出中的某些地方找到了这部分代码。虽然微笑的问题得到了回答,但它需要角度的输入。同一个人在其他地方写了更好的解决方案,我正在使用。但它有一个问题。它通常返回一个空白图像。或截断图像(通常从顶部)。因此,代码有问题,需要进行一些更改。我的问题是,我是新的核心图形和严重陷入这个问题 UIGraphicsBeginImageContext(imgView.image.size);

我创建了一个应用程序,在其中我可以使用手势旋转、重新调整大小和翻译图像。然后我需要从
UIImageView
获取图像。我在堆栈溢出中的某些地方找到了这部分代码。虽然微笑的问题得到了回答,但它需要角度的输入。同一个人在其他地方写了更好的解决方案,我正在使用。但它有一个问题。它通常返回一个空白图像。或截断图像(通常从顶部)。因此,代码有问题,需要进行一些更改。我的问题是,我是新的核心图形和严重陷入这个问题

UIGraphicsBeginImageContext(imgView.image.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGAffineTransform transform = imgView.transform;
transform = CGAffineTransformScale(transform, 1.0, -1.0);
CGContextConcatCTM(context, transform);
CGContextDrawImage(context, CGRectMake(0, 0, imgView.image.size.width, imgView.image.size.height), imgView.image.CGImage);
UIImage *newRotatedImage = [UIImage imageWithCGImage: CGBitmapContextCreateImage(context)];
UIGraphicsEndImageContext();
编辑1.1 感谢您提供的示例代码,但它仍然存在问题。让我更详细地解释一下,我使用手势来使用imageview缩放、转换和调整图像大小。因此,所有这些数据都保存在imageview的transform属性中。我喜欢核心图像的另一种方法。因此,我将代码更改为:

CGRect bounds =  CGRectMake(0, 0, imgTop.size.width, imgTop.size.height);
CIImage *ciImage = [[CIImage alloc] initWithCGImage:imageView.image.CGImage options:nil];
CGAffineTransform transform = imgView.transform;
ciImage = [ciImage imageByApplyingTransform:transform];
return [UIImage imageWithCIImage:ciImage] ;

现在我得到了压缩和错误大小的镜像图像。很抱歉再次打扰你。你能告诉我如何在coreimage中使用imageview的变换获得正确的图像吗?

我为这类事情创建了objective-C类。你可以在GitHub上查看它。以下是如何进行旋转:

ANImageBitmapRep * ibr = [myImage image];
[ibr rotate:anAngle];
UIImage * rotated = [ibr image];

请注意,此处,
anAngle
以弧度表示。

此处是指向文档的链接:-

旋转图像的示例代码:-

        CIImage *inputImage = [[CIImage alloc] initWithImage:currentImage];
        CIFilter * controlsFilter = [CIFilter filterWithName:@"CIAffineTransform"];
        [controlsFilter setValue:inputImage forKey:kCIInputImageKey];
        [controlsFilter setValue:[NSNumber numberWithFloat:slider.value] forKey:@"inputAngle"];
        CIImage *displayImage = controlsFilter.outputImage;
        UIImage *finalImage = [UIImage imageWithCIImage:displayImage];

        CIContext *context = [CIContext contextWithOptions:nil];
        if (displayImage == nil || finalImage == nil) {
            // We did not get output image. Let's display the original image itself.
            photoEditView.image = currentImage;
        }
         else {

            CGImageRef imageRef = [context createCGImage:displayImage fromRect:displayImage.extent];
            photoEditView.image = [UIImage imageWithCGImage:imageRef];
            CGImageRelease(imageRef);
        }
        context = nil;
        [inputImage release];

请记住添加代码:
transform=CGAffineTransformRotate(transform,-2*角度)因为旋转方向是相反的

我在objective C中创建了一个示例应用程序来实现这一点(减去缩放部分)。如果有人感兴趣,你可以在这里下载:

你可以使用CoreImage framework来旋转图像它适用于iOS 5.0或更高版本,但它确实比core graphics更好。谢谢你的提示。你能提供任何链接或样本吗?很抱歉,我对核心图像知之甚少。好的,我只向您提供示例代码和文档链接。为了记录,我需要合并2个UIImage,因此我和您一样遇到了问题-如何从UIImageView获得UIImage,并使用CGAffineTransformation进行转换。编辑1.1版中的代码对我很有帮助,并且适用于我的目的。嗨,莉娜。你粘贴的链接是关于XMPP的,不是关于图像旋转的。很抱歉,我错误地发布了与XMPP相关的研究
CIImage *ciImage = [[CIImage alloc] initWithCGImage:fximage.CGImage options:nil];
CGAffineTransform transform = fxobj.transform;
float angle = atan2(transform.b, transform.a);
transform = CGAffineTransformRotate(transform, - 2 * angle);
ciImage = [ciImage imageByApplyingTransform:transform];
UIImage *screenfxImage = [UIImage imageWithCIImage:ciImage];