我想只获得那些在不规则形状内的像素。使用核心图形不是openGL。这是一个我画了不规则形状的图像。
这是绘图代码
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
if(drawLineClicked)
{
UITouch *touch = [touches anyObject];
if ([touch view] == EditImageView)
{
lastPoint = [touch locationInView:self.view];
[self drawLines:10.0 andColorWithRed:1.0 Green:0.0 Blue:0.0 Alpha:1.0];
[self.view setNeedsDisplay];
currentPoint = lastPoint;
}
}
}
-(void)drawLines:(CGFloat)withWidth andColorWithRed:(CGFloat)red Green:(CGFloat)green Blue:(CGFloat)blue Alpha:(CGFloat)alpha
{
UIGraphicsBeginImageContext(Image.size);
[EditImageView.image drawInRect:CGRectMake(0, 0, Image.size.width, Image.size.height)];
ctx = UIGraphicsGetCurrentContext();
CGContextSetLineCap(ctx, kCGLineCapRound);
CGContextSetAllowsAntialiasing(ctx,TRUE);
CGContextFlush(ctx);
//sets the line width for a graphic context
CGContextSetLineWidth(ctx,withWidth);
//set the line colour
CGContextSetRGBStrokeColor(ctx, red, green, blue, alpha);
CGContextMoveToPoint(ctx, currentPoint.x, currentPoint.y);
CGContextAddLineToPoint(ctx, lastPoint.x,lastPoint.y);
CGContextStrokePath(ctx);
EditImageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
答案 0 :(得分:3)
这只是抛出一个想法:
我不是直接在图像上绘制红线,而是复制图像,将其作为新图层添加到原始图像的顶部,并为其提供一个完全透明的蒙版(因此新图层是“不可见的” )。
然后,当用户绘制红线时,使用它在不可见图层上构建路径作为蒙版。路径完成后,用黑色填充路径(在蒙版上),使该部分完全不透明。然后,您可以调整顶层(已被遮罩)的大小,使其成为绘制路径的边界矩形。
最顶层的不透明像素将是由绘制路径限制的像素,然后您可以随意使用它(将其绘制到新的UIImage等)。
希望有道理......
答案 1 :(得分:0)
在这里查看我的旧示例代码项目:Cropped Image
这是Cocoa,而不是Cocoa Touch,但这个想法是一样的。您可以使用SourceIn合成模式通过合成裁剪图像。