提取UIImageView的一部分

时间:2012-12-26 14:54:34

标签: iphone objective-c uiimageview resize warp

我想知道是否可以“提取”UIImageView的一部分。

例如,我选择使用Warp Affine作为UIImageView的一部分,我知道所选部分frame

就像在这张图片中一样:

enter image description here

是否可以从原始UIImageView获取所选部分而不会丢失质量?

2 个答案:

答案 0 :(得分:7)

通过类别方法获取视图的快照:

@implementation UIView(Snapshot)

-(UIImage*)makeSnapshot
{
  CGRect wholeRect = self.bounds;

  UIGraphicsBeginImageContextWithOptions(wholeRect.size, YES, [UIScreen mainScreen].scale);

  CGContextRef ctx = UIGraphicsGetCurrentContext();
  [[UIColor blackColor] set];
  CGContextFillRect(ctx, wholeRect);
  [self.layer renderInContext:ctx];

  UIImage* image = UIGraphicsGetImageFromCurrentImageContext();

  UIGraphicsEndImageContext();

  return image;
}

@end

然后通过另一种类别方法将其裁剪到你的矩形:

@implementation UIImage(Crop)

-(UIImage*)cropFromRect:(CGRect)fromRect
{
  fromRect = CGRectMake(fromRect.origin.x * self.scale,
                        fromRect.origin.y * self.scale,
                        fromRect.size.width * self.scale,
                        fromRect.size.height * self.scale);
  CGImageRef imageRef = CGImageCreateWithImageInRect(self.CGImage, fromRect);
  UIImage* crop = [UIImage imageWithCGImage:imageRef scale:self.scale orientation:self.imageOrientation];
  CGImageRelease(imageRef);
  return crop;
}

@end
在你的VC中

UIImage* snapshot = [self.imageView makeSnapshot];
UIImage* imageYouNeed = [snapshot cropFromRect:selectedRect];

selectedRect应该在self.imageView坐标系中,如果不是,那么请使用 selectedRect = [self.imageView convertRect:selectedRect fromView:...]

答案 1 :(得分:0)

是的,它很可能。首先你应该使用这个属性来获取UIImageView的图像:

@property(nonatomic, retain) UIImage *image;

和NSImage的:

@property(nonatomic, readonly) CGImageRef CGImage;

然后你得到剪切图像:

CGImageRef cutImage = CGImageCreateWithImageInRect(yourCGImageRef, CGRectMake(x, y, w, h));

如果你想再次使用UIImage,你应该使用这个UIImage的方法:

+ (UIImage *)imageWithCGImage:(CGImageRef)cgImage;

PS:我不知道如何直接进行,不将其转换为CGImageRef,也许就是这样。