我正在尝试从UIImage
获取UIImageView
的可见部分。 UIImageView
占据整个屏幕。捏和平移手势已添加到UIImageView
。因此,用户可以平移/缩放图像视图。平移/缩放后,我想仅裁剪图像视图的可见部分。我尝试了很多方法。但它让我错误地回到了图像部分。
提前致谢。
答案 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;
}