CGContextDrawRadialGradient不在PDF中呈现alpha?

时间:2012-02-05 18:42:32

标签: pdf quartz-graphics radial-gradients

我有以下图纸,它在中心呈现一个全彩色圆圈,边缘处为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);

1 个答案:

答案 0 :(得分:3)

Apple技术支持的官方回应:

  

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