我想通过在 UIImageView 中裁剪图像来创建一个新的 UIImage。例如在上面的图片中,我想要一个以绿色勾勒出的区域的新 UIImage。我找到了执行此操作的代码,通常它看起来像这样(作为 UIImage 类别):
- (UIImage *)croppedImage:(CGRect)bounds {
CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return croppedImage;
}
完全有道理。但是,我的 UIImageView 处于 contentMode 'aspect fit' 中。似乎这使 CGImageCreateWithImageInRect 的 CGRect 计算复杂化,我一直无法找出正确的解决方案。
我想我需要对绿色矩形应用与对图像所做的相同的转换?
另外:我在这里发现了另一个问题(How to know the image size after apply aspect fit for the image in an UIImageView),这似乎显示了一种获取尺寸的蛮力方式,但我仍然不确定它如何适合一种种植情况。
有任何想法吗?
编辑:就我而言,我确实有一个如上图所示的正方形,在 UIImageView 上的覆盖视图中绘制。因此,当我意识到我正在裁剪 UIImage(在 UIImageView 内)时,我需要以某种方式更改绿色 CGRect,使其“匹配”应用“方面适合”时完成的转换。例如,如果我让 UIImageView 处于“左上”模式,那么一切正常,因为底层 UIImage 和 UIImageView 之间存在 1:1 映射。“左上角”模式的问题是整个图像并不总是显示,因为它可能比我的 UIImageView 大。