我想使用任何关闭路径裁剪图像,如UIBezierPath。它可以在iPhone应用程序?

时间:2012-06-20 05:29:47

标签: iphone objective-c ios xcode image-processing

我想使用任何关闭路径(如UIBezierPath)在我的iPhone应用中裁剪图像。我知道有可能使用矩形,但我想要不同形状的裁剪。就像我使用触摸制作一个形状,并希望裁剪图像,以便如何实现。 任何建议或帮助。 提前谢谢。

3 个答案:

答案 0 :(得分:2)

您可以使用shapelayer裁剪图像。要做到这一点,你必须创建一个路径,用作新图像的边框。你应该看看这个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];

像这样。

答案 1 :(得分:1)

你可以使用面具来完成这个任务。您可以使用CGImageMaskCreate创建蒙版。

如果您需要示例:

Any idea why this image masking code does not work?

http://mobiledevelopertips.com/cocoa/how-to-mask-an-image.html

答案 2 :(得分: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;}