【问题标题】:Excluding Masked Areas From A "Paint Bucket" Fill On A UIImage从 UIImage 上的“油漆桶”填充中排除蒙版区域
【发布时间】:2011-12-23 16:41:11
【问题描述】:

我正在构建一个 iPhone 应用程序,它需要以非常特定的方式构建一些图像。这个问题很难解释,所以下面是我想要实现的图表。基本上,我想将“油漆桶”填充到 UIImage (将是 PNG)上。我假设这里的“油漆桶”一词等同于色调?

之后,我想创建一个蒙版对象(可更新并且可能包含多个形状),然后当我将另一个色调/油漆桶应用于原始图像时,被构建的蒙版覆盖的区域将不受影响。这基本上就像在一个物体周围缠上一些胶带,给它上色,然后取下胶带。正如所承诺的,这是我所追求的图表。重要的是要注意,虽然我在这里使用了交叉,但最终模式可能会非常复杂,并且必须在 PNG 内部而不是在代码中创建。感谢您提供的任何帮助!

【问题讨论】:

    标签: objective-c ios drawing core-graphics masking


    【解决方案1】:

    将您的十字架(或您想要的任何形状)创建为白色背景上的黑色图像。使用CGContextClipToMask 将其应用于您的图形上下文。然后使用CGContextFillRect 用蓝色填充上下文的边界。应该这样做:

    CGRect bounds = your context bounds;
    CGContextRef gc = your context;
    UIImage *cross = [UIImage imageNamed:@"cross"];
    CGContextSaveGState(gc); {
        CGContextClipToMask(gc, bounds, cross.CGImage);
        CGContextSetColorWithColor(gc, [UIColor blueColor].CGColor);
        CGContextFillRect(gc, bounds);
    } CGContextRestoreGState(gc);
    

    【讨论】:

    • 感谢您的回复@rob。抱歉,我是这些 C 语句的新手(最近一直在制作普通的旧“应用程序”!)。将其实际呈现在屏幕上的下一步是什么?另外,使用这种方法,是否也可以添加多个蒙版(所以可能是十字、圆圈等)?此外,行 CGContextSetColorWithColor(gc, [UIColor blueColor].CGColor);导致编译错误(“ld:未找到架构 i386 的符号。clang:错误:链接器命令失败,退出代码为 1”)。我将其替换为“CGContextSetRGBFillColor”,但没有显示。
    • 另外,听起来您需要完成一两个 Quartz(核心图形)教程。 stackoverflow.com/questions/3463256/…
    • 感谢罗布的帮助。是的,最好自己解决这个问题,而不是靠讲义生活。我只是对在屏幕上实际呈现该代码感到好奇。我将自己研究代码以更全面地理解它:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 2013-02-12
    • 2021-10-06
    相关资源
    最近更新 更多