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);

person anna    schedule 05.02.2012    source источник


Ответы (1)


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

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

person anna    schedule 08.02.2012