CGContextDrawRadialGradient не рендеринг альфа в PDF?

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

Решение

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

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

Другие вопросы по тегам