Domanda

Sto cercando di creare un filtro per il mio programma (che emana una webcam), che rende il flip telaio in orizzontale, rendendo l'atto webcam come uno specchio.

Tuttavia, mentre si compila e viene eseguito, il filtro non sembra avere alcun effetto su di esso.

Ecco il codice:

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

Stranamente, altri filtri sembrano funzionare. Ad esempio:

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

E 'qualcosa a che fare con NSAffineTransform? Ho guardato in giro, ma non ho trovato alcuna risposta. Grazie cumuli!

È stato utile?

Soluzione

Non sono sicuro se questo è il problema, ma nel tuo primo frammento di codice che si sta configurando due valori diversi per la stessa chiave (è possibile impostare inputTransform due volte), penso che il primo dovrebbe essere inputImage invece. Provate il seguente invece:

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

Inoltre, potrebbe essere necessario tradurre l'asse X per la larghezza dell'immagine

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

Altri suggerimenti

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

Non sei allocazione CIImage oggetto. Prova Questo codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top