Ich versuche etwas zu einer Farbmaske mit ausschließlich CImage Filter zu bekommen.Machen Sie alle schwarzen Pixel transparent mit CIImage
Grundsätzlich möchte ich alle schwarzen Pixel transparent machen. Es macht mir nichts aus, welche Farbe alle nicht-schwarzen Pixel haben, solange sie maximal Alpha haben.
Der Code, den ich mit in Core Graphics vertraut bin, um diese wie zu erreichen würden aussehen:
// Convert black sections to transparent using a color mask
const CGFloat maskingColors[6] = { 0, 0, 0, 0, 0, 0 };
CGImageRef result = CGImageCreateWithMaskingColors(image, maskingColors);
Ich habe es einen Schuss in Core Image gegeben einen Farbmatrix-Filter, aber es setzt nur result
-nil
da die CIVector-Werte größer als 1.0f
sind.
// 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];
Hinweis: Für was es wert ist, ist dies ein OSX App.
Benötigen Sie sie ein einfache Lösung oder die schnellste? Ich habe ein solches Problem einmal konfrontiert und ich empfehle Ihnen, OpenGL für schnelle Bild neu zu zeichnen, da Sie nicht nur transparente Pixel oben zeichnen können. – Mehdzor
Einfache Lösung für jetzt, aber wenn Sie Tipps zu OpenGL haben, wäre das auch gut. Idealerweise sollten wir alles für den Umfang dieser Frage im Rahmen von CIImage behalten (um auch anderen zu helfen). –
Haben Sie sich den 'CIFilter'' CIMaskToAlpha' oder 'CIColorMap' angesehen? –