如何用颜色填充形状

时间:2012-02-04 09:34:40

标签: iphone ios core-graphics flood-fill

我是Objective-C和iOS开发的新手。我有一些视图,其中一些数字是由核心绘图绘制的。现在我想用颜色填充这些形状,我不知道形状的路径或上下文。 Objective-C是否具有泛洪填充或放置像素等功能,因此只有笔触颜色,我可以在视图中填充任何形状。

-(void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 4.0);       
    CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();       
    CGFloat components[] = {1.0, 0.0, 0.0, 1.0};      
    CGColorRef color = CGColorCreate(colorspace, components);     
    CGContextSetStrokeColorWithColor(context, color);

    CGContextMoveToPoint(context, 50, 0);
    CGContextAddLineToPoint(context, 0,320);

    CGContextStrokePath(context);
    CGColorSpaceRelease(colorspace);
    CGColorRelease(color);


    CGContextSetLineWidth(context, 2.0);

    CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
    CGContextSetRGBFillColor(context, 0, 255, 0, 1.0);

    CGContextMoveToPoint(context, 100, 100);
    CGContextAddLineToPoint(context, 150, 150);
    CGContextAddLineToPoint(context, 100, 200);
    CGContextAddLineToPoint(context, 50, 150);
    CGContextAddLineToPoint(context, 100, 100);

    CGContextStrokePath(context);

    CGContextSetLineWidth(context, 2.0);

    CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);

    CGRect rectangle = CGRectMake(60,170,200,80);

    CGContextAddEllipseInRect(context, rectangle);

    CGContextStrokePath(context);
}

这将形成一个圆形和一个具有一些共同区域的正方形。当用户点击该区域时,我希望特定区域填充颜色。

4 个答案:

答案 0 :(得分:2)

所以你正在寻找目标C中的洪水填充。

这是我实施的扫描线泛光填充算法。

Github : UIImageScanlineFloodfill

如果你想学习洪水填充的基本知识:

Lode's Computer Graphics Tutorial Flood Fill

我希望这会对你有所帮助。

答案 1 :(得分:0)

将您的绘图代码放入问题中,我可以给您一个具体的答案。

通常您只需要使用

设置填充颜色
[[UIColor redColor] setFill];

您绘制核心图形的任何形状都将自动填充该颜色。

答案 2 :(得分:0)

尝试此命令: -

  CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);

答案 3 :(得分:0)

Core Graphics与UIView及其drawRect:方法紧密相关,并具有C接口。正如您所指出的,您总是在当前图形上下文中绘制。我可以想到两种方法:(1)当用户点击myView时,设置类似myView.pointTapped的属性,并在drawRect:中找到要填充的形状,设置填充颜色和填充使用 GGGeometry 方法的闭合路径。

有一个客观的C选择:(2)看看UIBezierPath。它不像在Core Graphics中绘图那么全面,但可以在ViewController实现中使用。

相关问题