我有一個視圖,周圍有黑色文字,我想創建一個白色的「發光」。我想我可以通過抓取屏幕截圖,倒置顏色(它只是黑白),遮住黑色透明,然後在每個方向上抖動結果圖像來做到這一點。當我嘗試用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)
我知道阿爾法通道可以彌補作品,但我真的不認爲我有任何alpha通道在這裏。只是爲了檢查我是否CGImageGetColorSpace(ref)
並得到了kCGColorSpaceDeviceRGB
,沒有alpha通道。
有人可以告訴我我要去哪裏嗎?可選地,快速評論幫助我理解UIImage,CIImage和CGImage之間的差異會很大。
謝謝,'CGImageGetAlphaInfo(ref)'返回'1'。 然後我嘗試'const CGFloat maskingColor [8] = {0,0,0,0,0,0,0,0};'但我仍然得到(null)。 – user2320861
這是'kCGImageAlphaPremultipliedLast',這意味着你有一個alpha通道。 –
查看我上面的編輯。這個alpha通道肯定會給你帶來一些問題。 –