У меня есть вид с черным текстом, вокруг которого я хочу создать белое «свечение». Я полагаю, что могу сделать это, захватив скриншот, инвертируя цвета (это только черно-белое), маскируя черный до прозрачного, а затем «дрожания» получаемого изображения в каждом направлении. Когда я пытаюсь замаскировать черный цвет с помощью CGImageCreateWithMaskingColors, я получаю нулевой CGImageRef. Пока это то, что у меня есть.CGImageCreateWithMaskingColors возвращает null
//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, будет отличным.
Спасибо, 'CGImageGetAlphaInfo (ref)' received '1'. Затем я попробовал 'const CGFloat maskingColor [8] = {0,0,0,0,0,0,0,0};', но я все еще получаю (null). – user2320861
Что такое 'kCGImageAlphaPremultipliedLast', что означает, что у вас есть альфа-канал. –
Смотрите мои правки выше. Этот альфа-канал определенно вызовет у вас некоторые проблемы. –