1

の一部を「抽出」できるかどうか疑問に思っていましたUIImageView

たとえば、Warp Affine を使用して の一部を選択し、選択した部分UIImageViewを知っていframeます。

この画像のように:

ここに画像の説明を入力

UIImageView品質を落とさずにオリジナルから選択した部分だけを取得することは可能ですか?

4

2 に答える 2

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

次に、別のカテゴリ メソッドを使用して 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];

selectedRectself.imageView座標系に ある必要があります。そうでない場合は、使用しますselectedRect = [self.imageView convertRect:selectedRect fromView:...]

于 2012-12-26T20:45:38.540 に答える
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に変換せずに、直接行う方法がわかりません。おそらく方法があります。

于 2012-12-26T15:19:57.590 に答える