我有一堆PDF正在我正在编写的应用程序中用作矢量艺术。我正在使用CG Context命令CGContextDrawPDFPage来绘制PDF,到目前为止它工作得很好。我遇到的一个问题是我希望能够在运行时修改矢量图的颜色。所有的PDF目前都是以黑色为基础绘制的。
是否可以绘制PDF但是以某种方式改变它所绘制的颜色?也许修改调色板,使黑色映射到其他东西,或实际上在运行时更改PDF本身?我意识到PDF文件中已经包含了颜色信息,所以也许可以告诉Quartz忽略这些颜色并使用其他颜色?
更多信息: 我正在绘制的PDF是程序需要绘制的各种图标/形状。它们是一些黑色的形状,背景透明。我需要能够绘制PDF但使用不同的颜色,或者像Bill Wilson提到的那样,并使用混合模式覆盖不同的颜色。我试过kCGBlendModeLighten,但问题是如果我在pdf周围填充一个矩形,外面的透明区域变成红色,所以只有一个红色的盒子而不是红色的形状。
所以我需要一种方法将黑色映射到颜色X,但保持透明。
以下是我需要以不同颜色绘制的PDF示例:http://davidevansgames.com/res/FON179.pdf
答案 0 :(得分:1)
绘制PDF后,将CGConext的混合模式设置为kCGBlendModeLighten
,并使用您想要的颜色填充上下文,这应该为您提供一些开始。
如果要对上下文执行任何其他绘制,请确保将混合模式设置为正常。或者使用CGContextSaveGState
和CGContextRestoreGState
保存和恢复上下文状态。
尝试其他混合模式,看看哪种方式最适合你......
我不确定这是否是您想要的,所以如果不是,您可以详细说明,也许分享您正在使用的PDF格式。
CGContextSaveGState(context);
CGContextSetBlendMode(context, kCGBlendModeLighten);
CGColorRef redColor = [UIColor colorWithRed:1.0 green:0.0
blue:0.0 alpha:1.0].CGColor;
CGContextSetFillColorWithColor(context, redColor);
CGContextFillRect(context, CGRectMake(0, 0, width, height));
CGContextRestoreGState(context)