iOS获取UIImageView的可视图像部分

时间:2012-06-20 13:34:17

标签: iphone objective-c ios

我正在尝试从UIImage获取UIImageView的可见部分。 UIImageView占据整个屏幕。捏和平移手势已添加到UIImageView。因此,用户可以平移/缩放图像视图。平移/缩放后,我想仅裁剪图像视图的可见部分。我尝试了很多方法。但它让我错误地回到了图像部分。

提前致谢。

2 个答案:

答案 0 :(得分:9)

将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;
}

答案 1 :(得分:1)

谢谢大家。我已经找到了解决方案。这是我用来获取图像可见部分的代码。 (请记住,在缩放或平移时图像不完全可见,因为它占据整个屏幕)

  - (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;
}