将UIScrollViewPoint转换为UIImage + ZOOM + ROTATE

时间:2017-08-24 06:10:01

标签: ios objective-c uiscrollview uiimageview uigraphicscontext

我需要裁剪UIImage加载UIScrollview的{​​{1}}加上UIView的另一个UIScrollView的矩形 --> View --> UIScrollView --> viewBase (UIView) --> UIImageView -> (Zoomed & rotated ) --> UIView (Target View)(Movable User can move anywhere in scrollview to crop rect)

以下是视图层次结构

TargetView

我的图片已旋转&放大我需要在UIImage

中获取图像的确切部分

我在context上轮换CGFloat angleCroppedImageRetreacted = atan2f(self.imgVPhoto.transform.b, self.imgVPhoto.transform.a); angleCroppedImageRetreacted = angleCroppedImageRetreacted * (180 / M_PI); UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.imgVPhoto.image.size.width, self.imgVPhoto.image.size.height)]; rotatedViewBox.transform = CGAffineTransformMakeRotation(-angleCroppedImageRetreacted); CGSize rotatedSize = rotatedViewBox.frame.size; UIGraphicsBeginImageContext(rotatedSize); CGContextRef bitmap = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(bitmap, rotatedSize.width / 2.0f, rotatedSize.height / 2.0f); CGContextRotateCTM(bitmap, -angleCroppedImageRetreacted); CGContextScaleCTM(bitmap, 1.0f, -1.0f); CGContextDrawImage(bitmap, CGRectMake(-self.imgVPhoto.image.size.width / 2.0f, -self.imgVPhoto.image.size.height / 2.0f, self.imgVPhoto.image.size.width, self.imgVPhoto.image.size.height), self.imgVPhoto.image.CGImage); UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 以下是代码

UIImage

它工作正常。我正在使用模拟器中可以看到的旋转UIImage

对于转换目标视图的点到 CGPoint imageViewPoint = [self.viewBase convertPoint:self.targetImageview.center toView:self.imgVPhoto]; float percentX = imageViewPoint.x / self.imgVPhoto.frame.size.width; float percentY = imageViewPoint.y / self.imgVPhoto.frame.size.height; CGPoint imagePoint = CGPointMake(resultImage.size.width * percentX, resultImage.size.height * percentY); rect.origin = imagePoint; //rect.origin.x *= (self.imgVPhoto.image.size.width / self.imgVPhoto.frame.size.width); //rect.origin.y *= (self.imgVPhoto.image.size.height / self.imgVPhoto.frame.size.height); imageRef = CGImageCreateWithImageInRect([resultImage CGImage], rect); img = [UIImage imageWithCGImage:imageRef scale:viewImage.scale orientation:viewImage.imageOrientation]; 我使用下面的代码,它不工作

Rect

我认为问题是我们在转换申请

之后无法使用UIImage

请帮我剪裁RSA,它在相同的层次结构中从矩形缩放和旋转

如果您需要更多信息,请询问

1 个答案:

答案 0 :(得分:0)

我正在回答我自己的问题。

感谢Matic给出了一个想法

我改变了逻辑

我已经实现了我想要的功能

CGPoint locationInImageView =  [self.viewBase convertPoint:self.targetImageview.center toView:self.view]; // received from touch
locationInImageView =  [self.view convertPoint:locationInImageView toView:self.imgVPhoto];

// I GOT LOCATION IN UIIMAGEVIEW OF TOUCH POINT

UIGraphicsBeginImageContextWithOptions(self.view.frame.size, NO, 0);

[self.imgVPhoto.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage *img1 = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

// I GOT UIIMAGE FROM  CURRENT CONTEXT 

CGFloat width = self.targetImageview.frame.size.width * self.zoomScale ;
CGFloat height = self.targetImageview.frame.size.height * self.zoomScale ;

 //2 IS SCALE FACTOR 

CGFloat xPos = (locationInImageView.x  * 2)  - width / 2;
CGFloat yPos = (locationInImageView.y * 2) - height / 2;

CGRect rect1 = CGRectMake(xPos, yPos, width, height);

CGImageRef imageRef = CGImageCreateWithImageInRect([img1 CGImage], rect1);


// YAHHH YOU HAVE EXACT IMAGE 
UIImage *img = [UIImage imageWithCGImage:imageRef scale:img1.scale orientation:img1.imageOrientation];