CISourceOverCompositing
フィルタを使用しようとしていますが、壁にぶつかっています。CISourceOverCompositingはデバイスとシミュレータで異なる結果を生成します
これは関連するコードです。マスクは、UIImage
と画像である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
のアレイが正しくシミュレータではなく、デバイスに適用されるアルファチャネルを含んでいます。出力には、アルファチャンネルを使用してイメージをブレンドすることなく、一見マスクが表示されます。
CoreGraphicsのAPIを使用して、ほぼ同じコードが正常に動作します(しかし、その後、私は他のCIFiltersを適用することはできません)
私はおそらくCIBlendWithMask
を使用しようとするでしょうが、その後、私はマスクを抽出し、複雑さを追加する必要があります。 ..