Pregunta

Estoy tratando de crear un filtro para mi programa (que transmite una cámara web) que hace que el marco se voltee horizontalmente, haciendo que la cámara web actúe como un espejo.

Sin embargo, mientras se compila y se ejecuta, el filtro no parece tener ningún efecto en él.

Aquí está el código:

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

Por extraño que parezca, otros filtros parecen funcionar. Por ejemplo:

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

¿Tiene algo que ver con NSaffinetransform? He mirado a su alrededor, pero no he encontrado ninguna respuesta. ¡Montones de gracias!

¿Fue útil?

Solución

No estoy seguro de si este es el problema, pero en su primer fragmento de código está configurando dos valores diferentes para la misma clave (se establece inputTransform dos veces), creo que el primero debería ser inputImage en cambio. Pruebe lo siguiente en su lugar:

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

Además, es posible que deba traducir el eje x por el ancho de la imagen

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

Otros consejos

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

No está asignando el objeto CIImage. Prueba este código.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top