У меня есть представление с черным текстом, вокруг которого я хочу создать белое «свечение». Я полагаю, что могу сделать это, сделав снимок экрана, инвертируя цвета (это только черный и белый), замаскировав черный до прозрачного, а затем «подергивая» получившееся изображение в каждом направлении. Когда я пытаюсь замаскировать черный цвет с помощью CGImageCreateWithMaskingColors, я получаю нулевое значение CGImageRef. Пока это то, что у меня есть.
//First get a screenshot into a CI image so I can apply a CI Filter
UIGraphicsBeginImageContext(self.view.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[self.view.layer renderInContext:context];
CIImage* ciImage = [[CIImage alloc] initWithCGImage:[UIGraphicsGetImageFromCurrentImageContext() CGImage]];
UIGraphicsEndImageContext();
//Now apply the CIColorInvert filter
CIFilter* filter = [CIFilter filterWithName:@"CIColorInvert" keysAndValues:kCIInputImageKey, ciImage, nil];
ciImage = [filter valueForKey:kCIOutputImageKey];
//Now I need to get a CG image from the CI image.
CIContext* ciContext = [CIContext contextWithOptions:nil];
CGImageRef ref = [ciContext createCGImage:ciImage fromRect:[ciImage extent]];
//Now I try to mask black
const float maskingColor[6] = {0,0,0,0,0,0};
ref = CGImageCreateWithMaskingColors(ref, maskingColor); //ref is (null)
Я знаю, что альфа-каналы могут испортить работу, но я действительно не думаю, что у меня здесь есть альфа-каналы. Просто чтобы проверить, я сделал CGImageGetColorSpace(ref)
и получил kCGColorSpaceDeviceRGB
, без альфа-канала.
Может кто-нибудь подскажет, где я ошибаюсь? При желании был бы замечателен быстрый комментарий, который поможет мне понять различия между UIImage, CIImage и CGImage.