CGContextDrawRadialGradient не рендеринг альфа в PDF? - PullRequest
2 голосов
/ 05 февраля 2012

У меня есть следующий рисунок, который отображает полный цветовой круг в центре, исчезающий до 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);

1 Ответ

3 голосов
/ 08 февраля 2012

Официальный ответ технической поддержки Apple:

Кварц игнорирует альфа-значение цветов в градиентах (или оттенках) при захвате градиента (или затенения) в документ PDF и вместо обрабатывает все цвета, как будто они полностью непрозрачны. К тому же, Кварц игнорирует глобальную альфа в контексте, когда он записывает градиенты (или штриховки) в документ PDF. Один из возможных обходных путей состоит в том, чтобы захватить затенение в виде битов с использованием растрового контекста и использовать результирующие биты для создания CGImage, который вы рисуете через отсечение площадь. Это производит предварительно отрисованные градиенты (или штриховки), но захватить альфа-контент в PDF-документ. Вы не должны выполнять это предварительный рендеринг для градиентов (или штриховок), которые не содержат альфа.

...