Ios Xcode:使用核心图像与alpha合成

Ios Xcode:使用核心图像与alpha合成,ios,image,core-graphics,core-image,Ios,Image,Core Graphics,Core Image,我想创建一个CoreImage过滤器链,并能够通过将其单独的效果与alpha或不透明度设置合成来控制链中每个过滤器的“强度”,但我没有看到在文档中与alpha或不透明度合成的方法 我可以跳出核心图像过滤链,用一个核心图形上下文进行合成。最后就是这样做的。此答案的代码: 过滤器可用于改变CIImage的alpha分量,然后可将其合成到背景图像上: CIImage *overlayImage = … // from file, CGImage etc CIImage *backgroundImage

我想创建一个CoreImage过滤器链,并能够通过将其单独的效果与alpha或不透明度设置合成来控制链中每个过滤器的“强度”,但我没有看到在文档中与alpha或不透明度合成的方法


我可以跳出核心图像过滤链,用一个核心图形上下文进行合成。

最后就是这样做的。此答案的代码:

过滤器可用于改变CIImage的alpha分量,然后可将其合成到背景图像上:

CIImage *overlayImage = … // from file, CGImage etc
CIImage *backgroundImage = … // likewise

CGFloat alpha = 0.5;
CGFloat rgba[4] = {0.0, 0.0, 0.0, alpha};
CIFilter *colorMatrix = [CIFilter filterWithName:@"CIColorMatrix"];
[colorMatrix setDefaults];
[colorMatrix setValue:overlayImage forKey: kCIInputImageKey];
[colorMatrix setValue:[CIVector vectorWithValues:rgba count:4] forKey:@"inputAVector"];

CIFilter *composite = [CIFilter filterWithName:@"CISourceOverCompositing"];
[composite setDefaults];
[composite setValue:colorMatrix.outputImage forKey: kCIInputImageKey];
[composite setValue:backgroundImage forKey: kCIInputBackgroundImageKey];

UIImage *blendedImage = [UIImage imageWithCIImage:composite.outputImage];

如果在核心图像和核心图形之间切换,则可以在使用GPU和CPU进行绘图之间切换。这样做会带来性能成本。一般来说,如果您尽可能多地使用GPU(并尽量减少切换),那么对于此类绘图/合成任务,您将获得更好的性能。
CIImage *overlayImage = … // from file, CGImage etc
CIImage *backgroundImage = … // likewise

CGFloat alpha = 0.5;
CGFloat rgba[4] = {0.0, 0.0, 0.0, alpha};
CIFilter *colorMatrix = [CIFilter filterWithName:@"CIColorMatrix"];
[colorMatrix setDefaults];
[colorMatrix setValue:overlayImage forKey: kCIInputImageKey];
[colorMatrix setValue:[CIVector vectorWithValues:rgba count:4] forKey:@"inputAVector"];

CIFilter *composite = [CIFilter filterWithName:@"CISourceOverCompositing"];
[composite setDefaults];
[composite setValue:colorMatrix.outputImage forKey: kCIInputImageKey];
[composite setValue:backgroundImage forKey: kCIInputBackgroundImageKey];

UIImage *blendedImage = [UIImage imageWithCIImage:composite.outputImage];