Frage

Ich versuche, einen Filter für mein Programm zu erstellen (das eine Webcam streamiert), mit der der Rahmen horizontal flippt und die Webcam wie ein Spiegel verwirkt.

Während es kompiliert und läuft, scheint der Filter keine Auswirkungen darauf zu haben.

Hier ist der Code:

CIImage *resultImage = image;
CIFilter *flipFilter = [CIFilter filterWithName:@"CIAffineTransform"];
[flipFilter setValue:resultImage forKey:@"inputTransform"];

NSAffineTransform* flipTransform = [NSAffineTransform transform];
[flipTransform scaleXBy:-1.0 yBy:1.0]; //horizontal flip
[flipFilter setValue:flipTransform forKey:@"inputTransform"];

resultImage = [flipFilter valueForKey:@"outputImage"];

Seltsamerweise scheinen andere Filter zu funktionieren. Zum Beispiel:

CIFilter * ciEffectFilter = [CIFilter filterWithName:@"CIGloom"];
[ciEffectFilter setDefaults];
CIImage *resultImage = image;
[ciEffectFilter setValue: resultImage forKey:@"inputImage"];
[ciEffectFilter setValue:[NSNumber numberWithFloat: 0.75]
                  forKey:@"inputIntensity"];
[ciEffectFilter setValue:[NSNumber numberWithFloat: 20]
                  forKey:@"inputRadius"];
resultImage = [ciEffectFilter valueForKey:@"outputImage"];


CIFilter *ciCropFilter = [CIFilter filterWithName:@"CICrop"];
[ciCropFilter setDefaults];
[ciCropFilter setValue: resultImage forKey:@"inputImage"];
[ciCropFilter setValue: [CIVector vectorWithX:50 Y:50 Z:300 W:
                         300] forKey:@"inputRectangle"];

resultImage = [ciCropFilter valueForKey:@"outputImage"];

Ist es etwas mit Nsaffinetransform zu tun? Ich habe mich umgesehen, aber ich habe keine Antworten gefunden. Tausend Dank!

War es hilfreich?

Lösung

Ich bin mir nicht sicher, ob dies das Problem ist, aber in Ihrem ersten Code -Snippet setzen Sie zwei verschiedene Werte für denselben Schlüssel (Sie haben festgelegt inputTransform zweimal), ich denke der erste sollte sein inputImage stattdessen. Probieren Sie stattdessen Folgendes aus:

CIImage *resultImage = image;
CIFilter *flipFilter = [CIFilter filterWithName:@"CIAffineTransform"];
[flipFilter setValue:resultImage forKey:@"inputImage"];

NSAffineTransform* flipTransform = [NSAffineTransform transform];
[flipTransform scaleXBy:-1.0 yBy:1.0]; //horizontal flip
[flipFilter setValue:flipTransform forKey:@"inputTransform"];

resultImage = [flipFilter valueForKey:@"outputImage"];

Möglicherweise müssen Sie die x -Achse durch die Breite des Bildes übersetzen

[flipTransform translateXBy:... yBy:0];

Andere Tipps

CIImage *cimage = [[CIImage alloc] initWithImage:image];

Sie weisen kein CIImage -Objekt zu. Probieren Sie diesen Code aus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top