我希望通过裁剪UIImageView中的图像来创建一个新的UIImage。例如,在上面的图片中,我想要一个新的UIImage,它的范围被绿色轮廓线框起来。我找到了一些代码来实现这个功能,通常它看起来像这样(作为UIImage类别):
- (UIImage *)croppedImage:(CGRect)bounds {
CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return croppedImage;
}
非常有道理。然而,我的UIImageView处于“aspect fit”内容模式。似乎这使得CGImageCreateWithImageInRect的CGRect计算变得复杂,我还没有能够找到正确的解决方案。
我想我需要对绿色矩形应用与图像相同的变换?
另外:我在这里找到了另一个问题(How to know the image size after applying aspect fit for the image in an UIImageView),它似乎展示了一种暴力获取大小的方法,但我仍然不确定它如何适用于裁剪情况。
有什么想法吗?
编辑:在我的情况下,我在UIImageView上方绘制了一个正方形覆盖层,如上所示。因此,虽然我意识到我正在裁剪UIImage(在UIImageView内部),但我需要以某种方式更改绿色CGRect,使其“匹配”应用“等比缩放”时所做的变换。例如,如果我将UIImageView保留在“左上角”模式中,则一切都正常工作,因为底层UIImage和UIImageView之间存在1:1映射。在“左上角”模式中的问题是,并非始终显示整个图像,因为它可能比我的UIImageView大。