我正在尝试使用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/

10-09 13:12