[英]crop section from resizeable UIImageView's image
我有一个UIImageView,它从UIImagePickerController获取图像。UIImageView设置为Aspect Fit Im,使用手势识别器来移动,缩放和旋转此UIImageView
我有第二个,小得多的UIImageView第二个UIImageView在第一个的前面并居中
我想做的是能够移动,缩放和旋转第一个UIImageView到位,然后按一个按钮以创建一个仅包含原始图像在第二个UIImageView范围内可见的部分的新图像。
我尝试了很多方法来裁剪图像而没有成功。 我尝试的所有操作都会裁剪图像,但是返回的图像不是我期望的。 我得到的结果似乎是“全尺寸”图像顶部,右侧部分的旋转部分。
我正在使用Trevor的Bike Shed中的UIImage类别
我的代码:
。H
@interface BubbleBossViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIGestureRecognizerDelegate>{
IBOutlet UIImageView *smallCropperWindow;
IBOutlet UIImageView *imageViewForChosenImage;
IBOutlet UIView *canvas;
CGFloat _lastScale;
CGFloat _lastRotation;
CGFloat _firstX;
CGFloat _firstY;
CAShapeLayer *_marque;
}
@property BOOL newMedia;
- (IBAction)useCamera:(id)sender;
- (IBAction)useCameraRoll:(id)sender;
- (IBAction)crop:(id)sender;
@end
相关.m- (void)crop:(id)sender {
smallCropperWindow.image=[imageViewForChosenImage.image croppedImage: (CGRect)smallCropperWindow.frame];
}
在UIImage + Resize.h中
- (UIImage *)croppedImage:(CGRect)bounds;
在UIImage + Resize.m中
- (UIImage *)croppedImage:(CGRect)bounds {
CGFloat scale = MAX(self.scale, 1.0f);
CGRect scaledBounds = CGRectMake(bounds.origin.x * scale, bounds.origin.y * scale, bounds.size.width * scale, bounds.size.height * scale);
CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], scaledBounds);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef scale:self.scale orientation:UIImageOrientationUp];
CGImageRelease(imageRef);
return croppedImage;
}
屏幕截图显示了问题:
中间的小方块应充满婴儿的脸,而不是全尺寸图片的地板一部分。
我在这里做错了什么?
您正在进行的计算似乎不正确。 尝试这个,
heightRatio=image.size.height/imageView.frame.height;
weidthRatio=image.size.width/imageView.frame.width;
现在,不必传递smallCropperWindow.frame
,而要做三件事,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.