2012-07-10 62 views
1

我有一堆PDF,我正在使用作为矢量艺术在我正在写一个应用程序。我正在使用CG上下文命令CGContextDrawPDFPage来绘制PDF,并且目前效果很好。我遇到的一个问题是,我希望能够在运行时修改矢量图的颜色。目前所有的PDF文件都是纯黑色的,正如它们的设计一样。石英2D绘制不同颜色的PDF页面

是否可以绘制PDF,但以某种方式改变它绘制的颜色?也许修改调色板,使黑色映射到其他东西,或实际上在运行时更改PDF本身?我意识到PDF文件中已经包含颜色信息,因此也许可以告诉Quartz忽略这些颜色并使用其他颜色?

更多信息: 我正在绘制的PDF文件是程序需要绘制的各种图标/形状。它们有些黑色,背景透明。我需要能够绘制PDF,但使用不同的颜色,或者像Bill Wilson所提到的那样使用混合模式叠加不同的颜色。我尝试了kCGBlendModeLighten,但问题是,如果我在pdf中填充矩形,外部透明区域变为红色,所以只有一个红色框,而不是红色形状。

所以我需要一种方法将黑色映射到X色,但保持透明。

这里是一个PDF,我需要用不同的颜色来绘制的例子:http://davidevansgames.com/res/FON179.pdf

回答

1

你画的PDF后,设置CGConext的混合模式为kCGBlendModeLighten,并与你想要的颜色填充的背景下,这应该给你一些开始。

如果您正在对上下文执行任何其他绘图,请确保将混合模式设置为正常。或者使用CGContextSaveGStateCGContextRestoreGState保存并恢复上下文状态。

实验与行吟诗人混合模式,看看什么最适合你...

我不知道这是否是你想要的,所以,如果这不是你能不能详细,也许共享的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) 
+0

有趣的建议!我试过这个,但不幸的是,它只是围绕PDF生成了一个红色框。我正在寻找不同的混合模式来找到一种只会使PDF变色的方法,但还没有找到一种可以使用的方法。 – phosphoer 2012-07-10 04:31:12

+0

嗯......这听起来很奇怪,但用白色填充上下文,然后绘制b&w PDF,然后执行上述步骤。你有可以分享的样本PDF吗?哎呀。看到你用PDF更新了你的Q.我会在上午尝试。 – 2012-07-10 06:16:40

+0

我刚刚意识到的观点的背景实际上是透明的,这是一个要求。所以我需要将黑色映射到X颜色,但保持透明。 – phosphoer 2012-07-10 06:51:43