我正在尝试使用CISourceOverCompositing
过滤器,但遇到了麻烦。
这是相关的代码。 mask是一个UIImage
,而images是一个UIImage
数组
ci_mask = [[CIImage alloc] initWithCGImage: mask.CGImage];
ctx = [CIContext contextWithOptions: nil];
compo = [CIFilter filterWithName: @"CISourceOverCompositing"];
for(int i = 0; i < images.count; i++) {
UIImage *image = [images objectAtIndex: i];
ci_base = [[CIImage alloc] initWithCGImage: image.CGImage];
[compo setDefaults];
[compo setValue: ci_mask forKey: @"inputImage"];
[compo setValue: ci_base forKey: @"inputBackgroundImage"];
result = compo.outputImage;
CGImageDestinationAddImage(
dst_ref,
[ctx createCGImage: result fromRect:result.extent],
frame_props
);
}
mask
包含一个Alpha通道,该通道已正确应用在模拟器中但不适用于设备。输出似乎仅按原样显示蒙版,而不使用alpha通道混合图像。使用CoreGraphics API的几乎相同的代码可以正常工作(但后来我无法应用其他CIFilter)
我可能会尝试使用
CIBlendWithMask
,但随后我必须提取掩码并增加复杂性... 最佳答案
在文件名和指定的文件中查找大写字母。在模拟器中工作时,它们不必具有相同的大小写,但是在设备上它们区分大小写。这使我无数次离开,如果您不寻找它,很难追踪。
关于iphone - CISourceOverCompositing在设备和模拟器中产生不同的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8963028/