1

書いているアプリのベクターアートとして使用しているPDFがたくさんあります。CGコンテキストコマンドCGContextDrawPDFPageを使用してPDFを描画していますが、これまでのところうまく機能しています。私が遭遇した問題は、実行時にベクターアートの色を変更できるようにしたいということです。現在、すべてのPDFは、設計どおりに黒一色で描画されています。

PDFを描くことは可能ですが、どういうわけかそれが描かれる色を変更しますか?たぶん、カラーパレットを変更して、黒が他の何かにマップされるようにしますか、それとも実行時にPDF自体を実際に変更しますか?PDFにはすでにファイルに色情報が含まれていることに気付いたので、Quartzにそれらの色を無視して他のものを使用するように指示することは可能でしょうか?

詳細:私が描いているPDFは、プログラムが描く必要のあるさまざまなアイコン/図形です。それらは透明な背景を持ついくつかの黒い形です。そのPDFを別の色で描画できるようにする必要があります。または、Bill Wilsonが述べたように、ブレンドモードを使用して別の色をオーバーレイする必要があります。kCGBlendModeLightenを試しましたが、問題は、PDFの周囲の長方形を塗りつぶすと、外側の透明な領域が赤になるため、赤い形ではなく赤いボックスだけが表示されることです。

したがって、黒を色Xにマッピングする方法が必要ですが、透明のままにしておきます。

これは私が異なる色で描く必要があるPDFの例です:http://davidevansgames.com/res/FON179.pdf

4

1 に答える 1

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)
于 2012-07-10T03:51:04.100 に答える