3

私は次の図を持っています。これは、中心でフルカラーの円をレンダリングし、端で 0 アルファにフェードします。これを画面に描くと完璧に見えます。ただし、PDF コンテキスト (CGPDFContextCreate) で同じものを描画すると、円全体が不透明になります。PDF にその他の通常のパスを描画すると、アルファ レンダリングで問題が発生します。したがって、グラデーションだけでは機能しません。これはバグですか、それとも何か不足していますか?

        CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB();
        size_t num_locations = 2;
        CGFloat locations[2] = { 1.0, 0.0 };

        CGColorRef color = [[UIColor redColor]CGColor];  
        CGFloat *k = (CGFloat *)CGColorGetComponents(color);
        CGFloat components[8] = { k[0], k[1], k[2], 0.0,    k[0], k[1], k[2], 1.0 };

        CGGradientRef myGradient = CGGradientCreateWithColorComponents(myColorspace, components, locations, num_locations);

        CGPoint c = CGPointMake(160, 160);
        CGContextDrawRadialGradient(pdfContext, myGradient, c, 0, c, 60, 0);
4

1 に答える 1

4

Apple テクニカル サポートからの公式の回答:

Quartz は、グラデーション (またはシェーディング) を PDF ドキュメントにキャプチャするときに、グラデーション (またはシェーディング) の色のアルファ値を無視し、代わりにすべての色を完全に不透明であるかのように扱います。さらに、Quartz はグラデーション (またはシェーディング) を PDF ドキュメントに記録するときに、コンテキスト内のグローバル アルファを無視します。考えられる回避策の 1 つは、ビットマップ コンテキストを使用してシェーディングをビットとしてキャプチャし、結果のビットを使用して、クリッピング領域を通して描画する CGImage を作成することです。これにより、事前にレンダリングされたグラデーション (またはシェーディング) が生成されますが、アルファ コンテンツが PDF ドキュメントに取り込まれます。アルファを含まないグラデーション (またはシェーディング) に対しては、この事前レンダリングを実行しないでください。

于 2012-02-08T16:03:25.760 に答える