[英]How to get a rotated, zoomed and panned image from an UIImageView at its full resolution?
[英]Get zoomed image from UIImageView
我在 UIScrollView 中使用 UIImageview 來讓用戶捏合和縮放圖像。 我現在想獲取用戶修改過的圖像(小或放大)。 我怎樣才能做到這一點?
謝謝。
好的,現在正在嘗試新的東西。 我可以從介於兩者之間的某個圖像中獲取縮略圖嗎? 我可以從 (0,0) 獲取固定大小的縮略圖。 我可以從 (10, 20) 或 (30, 30) 得到它嗎? 再次感謝。 我嘗試將 CGImageCreateWithImageInRect 與具有這些 x 和 y 值的矩形一起使用。 但它給了我一個從 0,0 點開始的圖像
當你在 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;
}
我通過創建一個很小的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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.