我想知道是否可以“提取” UIImageView
.
例如,我选择使用 Warp Affine 的一部分UIImageView
并且我知道所选部分frame
。
就像这张图片:
是否可以从原件中UIImageView
仅获取选定的部分而不会损失质量?
我想知道是否可以“提取” UIImageView
.
例如,我选择使用 Warp Affine 的一部分UIImageView
并且我知道所选部分frame
。
就像这张图片:
是否可以从原件中UIImageView
仅获取选定的部分而不会损失质量?
通过 category 方法获取视图的快照:
@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:...]
是的,这是可能的。首先,您应该使用此属性获取 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,或许有办法。