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;

【讨论】:

什么是 initialWidthinitialHeight

以上是关于iOS 为 UIImageView 获取图像的可见部分的主要内容,如果未能解决你的问题,请参考以下文章

如何以全分辨率从 UIImageView 获取旋转、缩放和平移的图像?

如何将图像设置为在另一个视图控制器中异步获取的 UIImageView?

iOS UITableViewCell 和 UIImageView 在视图外显示图像

将 UIImageView 和覆盖的 UIView 保存为图像(xcode/iOS)

iOS:以像素为单位获取显示的图像大小

获取当前设置为 UIImageView 的图像名称的任何替代方法?