3

我有以下绘图,它在中心呈现一个全彩色的圆圈,在边缘逐渐消失为 0 alpha。将其绘制到屏幕上时,它看起来很完美。但是,当我在 PDF 上下文 (CGPDFContextCreate) 中绘制相同的东西时,整个圆圈变得不透明。如果我在 PDF 中绘制任何其他常规路径,则 alpha 会呈现罚款。所以只是渐变不起作用。这是一个错误还是我错过了什么?

        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

苹果技术支持官方回应:

Quartz 在捕获 PDF 文档的渐变(或阴影)时会忽略渐变(或阴影)中颜色的 alpha 值,而是将所有颜色视为完全不透明。此外,Quartz 在将渐变(或阴影)记录到 PDF 文档时会忽略上下文中的全局 alpha。一种可能的解决方法是使用位图上下文将阴影捕获为位,并使用生成的位来创建通过剪辑区域绘制的 CGImage。这会产生预渲染的渐变(或阴影),但会将 alpha 内容捕获到 PDF 文档中。您不应该对不包含 alpha 的渐变(或阴影)执行此预渲染。

于 2012-02-08T16:03:25.760 回答