の一部を「抽出」できるかどうか疑問に思っていましたUIImageView
。
たとえば、Warp Affine を使用して の一部を選択し、選択した部分UIImageView
を知っていframe
ます。
この画像のように:
UIImageView
品質を落とさずにオリジナルから選択した部分だけを取得することは可能ですか?
の一部を「抽出」できるかどうか疑問に思っていましたUIImageView
。
たとえば、Warp Affine を使用して の一部を選択し、選択した部分UIImageView
を知っていframe
ます。
この画像のように:
UIImageView
品質を落とさずにオリジナルから選択した部分だけを取得することは可能ですか?
カテゴリ メソッドを介してビューのスナップショットを取得します。
@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
次に、別のカテゴリ メソッドを使用して rect にトリミングします。
@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に変換せずに、直接行う方法がわかりません。おそらく方法があります。