CIImageフィルタを排他的に使用してカラーマスクに似たものを取得しようとしています。CIImageを使用してすべての黒ピクセルを透明にします。
基本的には、すべての黒色ピクセルを透明にすることを検討しています。私は最大のアルファを持っている限り、黒以外のピクセルがどのような色になるのか気にしません。
私はこれが見える達成することでコアグラフィックスに精通してるコードのように:私はそれをカラーマトリックスフィルタを使用して、コアイメージでショットを与えてくれたが、それはただnil
にresult
を設定
// Convert black sections to transparent using a color mask
const CGFloat maskingColors[6] = { 0, 0, 0, 0, 0, 0 };
CGImageRef result = CGImageCreateWithMaskingColors(image, maskingColors);
CIVectorの値が1.0f
より大きいためです。
// Create color matrix filter
CIFilter *matrix = [CIFilter filterWithName:@"CIColorMatrix"];
// Set filter properties
[matrix setValue:image forKey:kCIInputImageKey];
[matrix setValue:[CIVector vectorWithX:1.0f Y:0.0f Z:0.0f W:0.0f] forKey:@"inputRVector"];
[matrix setValue:[CIVector vectorWithX:0.0f Y:1.0f Z:0.0f W:0.0f] forKey:@"inputGVector"];
[matrix setValue:[CIVector vectorWithX:0.0f Y:0.0f Z:1.0f W:0.0f] forKey:@"inputBVector"];
[matrix setValue:[CIVector vectorWithX:255.0f Y:255.0f Z:255.0f W:0.0f] forKey:@"inputAVector"];
// Get the mapped image
CIImage *result = [matrix valueForKey:kCIOutputImageKey];
注:これは価値があるため、これはOSXアプリケーションです。 (シンプル)カスタムCIFilterを使用して
あなたがそれ必要ですシンプルなソリューションか最速ですか?私はそのような問題に一度直面してきました。私はあなたが上記の透明なピクセルを描画することはできませんので、高速イメージの再描画のためにOpenGLを使用することをお勧めします。 – Mehdzor
今のところ単純な解決策ですが、OpenGLのヒントがあればそれも良いでしょう。理想的には、この質問の範囲については、CIImage内のすべてを(他の人も同様に)助けてください。 –
あなたは 'CIFilter'' CIMaskToAlpha'か 'CIColorMap'を見ましたか? –