我在UIScrollView中使用UIImageview来让用户捏合和缩放图像。我现在想要获取用户已修改的图像(小或放大)。我怎么能这样做?
感谢。
好的,我现在正在尝试新事物。我可以从中间某处的图像中获取缩略图吗? 我可以从(0,0)获得固定大小的缩略图。我可以说(10,20)或(30,30)吗?再次感谢。 我尝试使用CGImageCreateWithImageInRect和一个具有x和y这些值的矩形。但它给我一个点0,0
的图像答案 0 :(得分:1)
在UIScrollView中缩放UIImageView对象时,只更改UIImageView框架,但图像属性中的UIImage保持不变。
如果您只想在其他UIImageView中显示此图像,则不应更改UIImage大小,只需将新的UIImageView框架设置为与UIScrollView中的缩放UIImageView框架相同并使用相同的图像:
UIImageView * ImageViewOnScroll;
//set image and zoom it
...
UIImageView * newImageView = [[UIImageView alloc] initWithImage:ImageViewOnScroll.image];
newImageView.frame = ImageViewOnScroll.frame;
如果出于某种原因想要创建具有更改大小的新UIImage,您可以使用以下简单方法来执行此操作:
UIImage * resizeImage(UIImage * img, CGSize newSize){
UIGraphicsBeginImageContext(newSize);
//or other CGInterpolationQuality value
CGContextSetInterpolationQuality(UIGraphicsGetCurrentContext(), kCGInterpolationDefault);
[img drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
答案 1 :(得分:0)
我通过创建一个微小的UIImage
扩展名(兼容Swift 5.2)解决了该问题,当您将UIImageView
嵌入UIScrollView
时,该扩展名可以完美地工作:
extension UIImage {
func crop(from scrollView: UIScrollView) -> UIImage? {
let zoom: CGFloat = 1.0 / scrollView.zoomScale
let xOffset: CGFloat = (size.width / scrollView.contentSize.width) * scrollView.contentOffset.x
let yOffset: CGFloat = (size.height / scrollView.contentSize.height) * scrollView.contentOffset.y
let cropRect = CGRect(xOffset * scale, yOffset * scale, size.width * zoom * scale, size.height * zoom * scale)
guard let croppedImageRef = cgImage?.cropping(to: cropRect) else { return nil }
let croppedImage = UIImage(cgImage: croppedImageRef, scale: scale, orientation: imageOrientation)
return croppedImage
}
}
使用它来放大图像的一部分:
let croppedImage = sourceImage.crop(from: scrollView)