我有一个从UIImagePickerController获取图像的UIImageView UIImageView设置为Aspect Fit 我使用手势识别器来移动,缩放和旋转这个UIImageView
我有第二个,小得多的UIImageView 第二个UIImageView位于第一个
的前面并以第一个为中心我想要做的是能够移动,缩放和旋转第一个UIImageView到位,然后按一个按钮创建一个新图像,其中只包含原始图像的一部分,可以在第二个UIImageView
我尝试了很多方法来裁剪图像而没有成功。我尝试的所有东西都会裁剪图像,但返回的图像并不是我所期望的。我得到的东西似乎是FULL SIZE图像顶部右手部分的旋转部分。
我正在使用Trevor’s 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 - (无效)作物:(ID)发送方{
smallCropperWindow.image=[imageViewForChosenImage.image croppedImage: (CGRect)smallCropperWindow.frame];
}
UIImage + Resize.h中的
- (UIImage *)croppedImage:(CGRect)bounds;
UIImage + Resize.m 中的
显示问题的屏幕截图:
中间的小方块应该用babbie的脸填充,而不是全尺寸图像中的一部分地板。 我在这里做错了什么?- (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;
}
答案 0 :(得分:0)
您正在进行的计算似乎不正确。试试这个,
heightRatio=image.size.height/imageView.frame.height;
weidthRatio=image.size.width/imageView.frame.width;
现在不是传递你的smallCropperWindow.frame
,而是要做三件事,