我正在让用户从相机中拍摄或从库中选择一张图片。我将这个图片显示在一个
当用户满意结果并点击“完成”时,我想生成一个裁剪后的
UIImageView
中。现在,用户可以在一个边界框内缩放和定位图像,就像你使用UIImagePickerController
时设置allowsEditing
为YES
一样。当用户满意结果并点击“完成”时,我想生成一个裁剪后的
UIImage
。问题在于使用CGImageCreateWithImageInRect
时,它不考虑缩放。变换应用于imageView,如下所示:CGAffineTransform transform = CGAffineTransformScale(self.imageView.transform, newScale, newScale);
[self.imageView setTransform:transform];
使用手势识别。
我猜测正在发生的是:UIImageView被缩放和移动,然后它将UIViewContentModeScaleAspectFit应用到它所持有的UIImage上,当我要求裁剪图像时,它会完全地进行裁剪而不考虑缩放和定位。我认为这是因为,如果我不对图片进行缩放或移动,而只是直接点击“完成”,那么裁剪就可以正常工作。
我通过以下方式裁剪图片:
- (UIImage *)cropImage:(UIImage*) img toRect:(CGRect)rect {
CGFloat scale = [[UIScreen mainScreen] scale];
if (scale>1.0) {
rect = CGRectMake(rect.origin.x*scale , rect.origin.y*scale, rect.size.width*scale, rect.size.height*scale);
}
CGImageRef imageRef = CGImageCreateWithImageInRect([img CGImage], rect);
UIImage *result = [UIImage imageWithCGImage:imageRef scale:self.imageView.image.scale orientation:self.imageView.image.imageOrientation];
// UIImage *result = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return result;
}
从我的主视图的子视图(类似于UIImagePickerController中的方形覆盖框)中传递一个cropRect。主UIView具有一个UIImageView进行缩放和一个显示裁剪矩形的UIView。
我该如何获得“所见即所得”的裁剪效果,以及必须考虑哪些因素。或者,如果我应该以不同的层次结构或比例实现建议。