0

白い「グロー」を作成したい黒いテキストのビューがあります。スクリーンショットを取得し、色を反転し(白黒のみ)、黒を透明にマスクしてから、結果の画像を各方向に「ジッタリング」することでこれを行うことができると思います. CGImageCreateWithMaskingColors で黒をマスクしようとすると、null 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 の違いを理解するのに役立つ簡単なコメントをいただければ幸いです。

4

2 に答える 2

1

のドキュメントを見ると、パラメーターは次のようにCGImageCreateWithMaskingColors説明されています。image

マスクするイメージ。このパラメータはイメージ マスクではない可能性があり、イメージ マスクやマスキング カラーが関連付けられていない可能性があり、アルファ コンポーネントを持つことはできません

CGImageGetAlphaInfoCGImageRef にアルファ チャネルがあるかどうかを判断するために使用する必要があります。

そして、その厄介なアルファチャンネルを取り除くという点では、このSOの質問が役立つと思うでしょう:

CGBitmapContextCreate with kCGImageAlphaNone

于 2014-02-17T05:31:12.980 に答える