Я хочу, чтобы обрезать изображение в моем приложении iPhone, используя любой близкий путь, как UIBezierPath. Я знаю, что можно использовать прямоугольник, но я хочу, чтобы культура была в другой форме. например, я делаю одну форму с помощью касания и хочу обрезать это изображение так, как это возможно. любое предложение или помощь. Спасибо заранее.Я хочу обрезать изображение, используя любой близкий путь, например UIBezierPath. это возможно в приложении iPhone?
5
A
ответ
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 можете ли вы использовать PLZ здесь, как обрезать изображение с помощью shapelayer ..... –
1
Вы можете выполнить это с помощью маски. вы можете создать маску, используя CGImageMaskCreate
.
если вам нужны примеры:
Any idea why this image masking code does not work?
http://mobiledevelopertips.com/cocoa/how-to-mask-an-image.html
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;}
Я никогда не делал раньше, но я полагаю, вам нужно использовать магу маскировку. Попробуйте прочитать это яблоко Doc [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
Маскировка - это способ получить. Взгляните на этот короткий пример http://mobiledevelopertips.com/cocoa/how-to-mask-an-image.html – msg