Question

Je suis en train de créer un filtre pour mon programme (qui ruisselle une webcam) qui rend le flip cadre horizontalement, ce qui rend l'acte de webcam comme un miroir.

Cependant, alors qu'il compile et fonctionne, le filtre ne semble pas avoir d'effet sur elle.

Voici le 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"];

Étrangement, d'autres filtres semblent fonctionner. Par exemple:

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"];

Est-il quelque chose à voir avec NSAffineTransform? Je l'ai regardé autour, mais je ne l'ai pas trouvé de réponses. tas de Merci!

Était-ce utile?

La solution

Je ne sais pas si cela est le problème, mais dans votre premier extrait de code que vous définissez deux valeurs différentes pour la même touche (vous définissez inputTransform deux fois), je pense que le premier devrait être inputImage à la place. Essayez ce qui suit à la place:

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"];

, vous devrez peut-être de traduire l'axe X par la largeur de l'image

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

Autres conseils

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

Vous n'êtes pas allouons objet CIImage. Essayez ce code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top