0

我只想获得不规则形状内的那些像素。使用核心图形而不是 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();
}
4

2 回答 2

3

这里只是抛出一个想法:

我不会直接在图像上绘制红线,而是复制图像,将其作为新图层添加到原始图像之上,并给它一个完全透明的蒙版(因此新图层是“不可见的”)。

然后当用户绘制红线时,使用它在不可见层上构建路径作为蒙版。路径完成后,用黑色填充路径(在蒙版上),使该部分完全不透明。然后,您可以将顶层(已被屏蔽)调整为绘制路径的边界矩形。

然后,最顶层上的不透明像素将是由绘制路径限定的像素,然后您可以使用它做任何您想做的事情(将其绘制到新的 UIImage 等)。

希望这是有道理的...

于 2009-09-29T16:05:57.607 回答
0

Take a look at my old sample code project here: Cropped Image

It's for Cocoa, not Cocoa Touch, but the idea is the same. You can crop an image by compositing using the SourceIn compositing mode.

于 2009-09-29T19:45:48.003 回答