iOS 为 UIImageView 获取图像的可见部分
Posted
技术标签:
【中文标题】iOS 为 UIImageView 获取图像的可见部分【英文标题】:iOS get Visible portion of Image for an UIImageView 【发布时间】:2012-06-20 13:34:16 【问题描述】:我正在尝试从UIImageView
中获取UIImage
的可见部分。 UIImageView
占据整个屏幕。捏和平移手势添加到UIImageView
。因此,用户可以平移/缩放图像视图。平移/缩放后,我只想裁剪图像视图的可见部分。我尝试了很多方法。但它返回给我错误的图像部分。
提前致谢。
【问题讨论】:
请分享您的裁剪代码,谢谢 【参考方案1】:在您的项目中包含 QuartzCore 框架并实现此方法以从图像视图中获取图像的可见部分: (注:我的意思是您在项目中使用了 ARC)
#import <QuartzCore/QuartzCore.h>
- (UIImage*)imageFromImageView:(UIImageView*)imageView
UIGraphicsBeginImageContext(imageView.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextRotateCTM(context, 2*M_PI);
[imageView.layer renderInContext:context];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
【讨论】:
非常感谢#DizAsm。它非常适合我的图像视图。我为我的 imageview 设置了以下属性。[imageView setClipsToBounds:YES];和 imageView.contentMode = UIViewContentModeScaleAspectFill。从 imageview 可见区域获得准确的图像非常困难。现在它完美地工作了。【参考方案2】:谢谢大家。我已经想出了解决方案。这是我用来获取图像可见部分的代码。 (请记住,由于图像占据了整个屏幕,因此在缩放或平移时图像并不完全可见)
- (UIImage *)cropVisiblePortionOfImageView:(UIImageView *)imageView
CGFloat zoomScaleX=imageView.frame.size.width/initialWidth;
CGFloat zoomScaleY=imageView.frame.size.height/initialHeight;
CGSize zoomedSize=CGSizeMake(initialWidth*zoomScaleX,initialHeight*zoomScaleY);
UIGraphicsBeginImageContext(zoomedSize);
[imageView.image drawInRect:CGRectMake(0, 0, zoomedSize.width, zoomedSize.height)];
UIImage *zoomedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIGraphicsBeginImageContext(CGSizeMake(initialWidth, initialHeight));
[zoomedImage drawAtPoint:CGPointMake(imageView.frame.origin.x, imageView.frame.origin.y)];
UIImage *cropedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return cropedImage;
【讨论】:
什么是 initialWidth 和 initialHeight ?以上是关于iOS 为 UIImageView 获取图像的可见部分的主要内容,如果未能解决你的问题,请参考以下文章
如何以全分辨率从 UIImageView 获取旋转、缩放和平移的图像?
如何将图像设置为在另一个视图控制器中异步获取的 UIImageView?
iOS UITableViewCell 和 UIImageView 在视图外显示图像