2012-06-20 1 views
5

私は自分のiPhoneアプリでUIBezierPathのような近いパスを使って画像をトリミングしたいと思っています。私はそれが可能な長方形を使用して知っているが、私はさまざまな形の作物をしたい。私はタッチを使って1つの図形を作ってそのイメージを切り抜きたいと思うようにします。 提案やヘルプ。 ありがとうございます。UIBezierPathのようなクローズパスを使って画像をトリミングしたい。それはiPhoneアプリケーションで可能ですか?

+1

私が前にやったことはありませんが、私はあなたが魔法使いのマスクを使用する必要があるとします。このappleの記事を読んでみてください。[Quartz 2D Programming Guide](https://developer.apple.com/library/ios/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_images/dq_images.html#//apple_ref/doc/uid/TP30001066- CH212-CJBDIJEE)。たぶんbezierPathをプログラムまたはユーザーのやりとりによって透明なイメージを作成し、このイメージを元のイメージのマスクとして使用することができます。 – Gabriele

+0

マスキングは得られる方法です。この短い例を見てください。http://mobiledevelopertips.com/cocoa/how-to-mask-an-image.html – msg

答えて

2

シェイプレイヤーで画像をトリミングすることができます。これを行うには、新しいイメージの境界線として使用されるパスを作成する必要があります。このquestionをご覧ください。

CALayer* contentLayer = [CALayer layer]; 
[contentLayer setFrame:CGRectMake(0, 0, 80, 80)]; 
CAShapeLayer* mask = [CAShapeLayer layer]; 

CGMutablePathRef path = CGPathCreateMutable(); 

CGPathMoveToPoint(path, NULL, 10, 10); 
CGPathAddLineToPoint(path, NULL, 10, 80); 
CGPathAddLineToPoint(path, NULL, 80, 80); 
CGPathAddLineToPoint(path, NULL, 80, 10); 
mask.path = path; 

[contentLayer setContents:(id)[[UIImage imageNamed:@"image.png"] CGImage]]; 
[contentLayer setMask:mask];   

[[self layer]addSublayer:contentLayer]; 

このようなものです。

+0

Vitaliy1は、ここにコードを貼り付けて、シェイプレイヤーで画像を切り取る方法を教えてください..... –

0

//:

-(UIImage *)croppedImage 

{ 
    UIImage *myImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 
[self.bezierPath closePath]; 

CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.0, 0.0, 0.0, 0.0); 
_b_image = self.bg_imageview.image; 

CGSize imageSize = _b_image.size; 
CGRect imageRect = CGRectMake(0, 0, imageSize.width, imageSize.height); 

UIGraphicsBeginImageContextWithOptions(imageSize, NO, [[UIScreen mainScreen] scale]); 
[self.bezierPath addClip]; 
[_b_image drawInRect:imageRect]; 
UIImage *croppedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return croppedImage;} 
関連する問題