Quartz 2D 绘制不同颜色的 PDF 页面
Posted
技术标签:
【中文标题】Quartz 2D 绘制不同颜色的 PDF 页面【英文标题】:Quartz 2D draw PDF page with different color 【发布时间】:2012-07-10 02:53:44 【问题描述】:我有一堆 PDF,在我正在编写的应用程序中用作矢量图。我正在使用 CG Context 命令 CGContextDrawPDFPage 来绘制 PDF,到目前为止效果很好。我遇到的一个问题是我希望能够在运行时修改矢量图的颜色。目前所有的 PDF 都按照设计的方式绘制为纯黑色。
是否可以绘制 PDF 但以某种方式更改其绘制的颜色?也许修改调色板以便黑色映射到其他东西,或者在运行时实际更改 PDF 本身?我意识到 PDF 文件中已经包含颜色信息,所以也许可以告诉 Quartz 忽略这些颜色并使用其他颜色?
更多信息: 我正在绘制的 PDF 是程序需要绘制的各种图标/形状。它们是一些黑色的形状,带有透明的背景。我需要能够绘制该 PDF 但使用不同的颜色,或者像比尔威尔逊提到的那样使用混合模式覆盖不同的颜色。我尝试了 kCGBlendModeLighten 但问题是如果我在 pdf 周围填充一个矩形,外部透明区域会变成红色,所以只有一个红色框而不是红色形状。
所以我需要一种方法将黑色映射到颜色 X,但保持透明。
这是我需要用不同颜色绘制的 PDF 示例:http://davidevansgames.com/res/FON179.pdf
【问题讨论】:
【参考方案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)
【讨论】:
有趣的建议!我试过这个,但不幸的是它只是在 pdf 周围产生了一个红色框。我正在研究不同的混合模式,以找到一种只会为 pdf 着色的混合模式,但还没有找到一种有效的混合模式。 嗯...这听起来可能很奇怪,但是用白色填充上下文,然后绘制黑白 PDF,然后执行上述步骤。您有可以分享的示例 PDF 吗?哎呀。看到你用 PDF 更新了你的 Q。我会在上午试一试。 刚刚实现的view的背景其实是透明的,这是一个要求。所以我需要将黑色映射到 X 颜色,但保持透明。以上是关于Quartz 2D 绘制不同颜色的 PDF 页面的主要内容,如果未能解决你的问题,请参考以下文章