从UIImageView获取缩放图像

时间:2010-03-05 10:31:04

标签: iphone uiscrollview uiimageview

我在UIScrollView中使用UIImageview来让用户捏合和缩放图像。我现在想要获取用户已修改的图像(小或放大)。我怎么能这样做?

感谢。

好的,我现在正在尝试新事物。我可以从中间某处的图像中获取缩略图吗? 我可以从(0,0)获得固定大小的缩略图。我可以说(10,20)或(30,30)吗?再次感谢。 我尝试使用CGImageCreateWithImageInRect和一个具有x和y这些值的矩形。但它给我一个点0,0

的图像

2 个答案:

答案 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)