2009-05-04 8 views
2

J'ai besoin de retourner horizontalement une vidéo que je prévisualise et capture. A-la iChat, j'ai une webcam et je veux qu'il apparaisse comme si l'utilisateur se regardait dans un miroir.Inverser l'aperçu et la capture Quicktime

Je prévisualise la vidéo Quicktime dans un QTCaptureView. Ma capture se fait image par image (pour des raisons que je ne vais pas entrer dans) avec quelque chose comme:

imageRep = [NSCIImageRep imageRepWithCIImage: [CIImage imageWithCVImageBuffer: frame]]; 
image = [[NSImage alloc] initWithSize: [imageRep size]]; 
[image addRepresentation: imageRep]; 
[movie addImage: image forDuration: someDuration withAttributes: someAttributes]; 

Des conseils?

Répondre

3

Vous pouvez le faire en prenant le CIImage que vous obtenez de la capture et en l'exécutant à travers un filtre Image Core pour retourner l'image. Vous passeriez alors l'image résultante dans votre représentant d'image plutôt que l'original. Le code ressemblerait à quelque chose comme:

CIImage* capturedImage = [CIImage imageWithCVImageBuffer:buffer]; 
NSAffineTransform* flipTransform = [NSAffineTransform transform]; 
CIFilter* flipFilter; 
CIImage* flippedImage; 

[flipTransform scaleByX:-1.0 y:1.0]; //horizontal flip 
flipFilter = [CIImage filterWithName:@"CIAffineTransform"]; 
[flipFilter setValue:flipTransform forKey:@"inputTransform"]; 
[flipFilter setValue:capturedImage forKey:@"inputImage"]; 
flippedImage = [flipFilter valueForKey:@"outputImage"]; 
imageRep = [NSCIImageRep imageRepWithCIImage:flippedImage]; 
... 
+0

Cela ressemble à cela fonctionnera probablement pour l'enregistrement, mais qu'en est-il la 'QTCaptureView'? – Dan

+0

Quelque chose comme cela peut fonctionner, en utilisant la même configuration pour la variable flipFilter comme ci-dessus: [captureView setWantsLayer: YES]; captureView.layer.filters = [NSArray arrayWithObject: flipFilter]; –

+0

Génial - cela semble bien fonctionner! J'ai dû ajouter une transformation de traduction par le négatif de la largeur de la vue pour déplacer la vidéo retournée là où elle devrait être, mais c'était facile. – Dan

10

Rien ne ressemble à ressusciter une vieille question. Quoi qu'il en soit, je suis venu ici et presque trouvé ce que je cherchais grâce à Brian Webster, mais si quelqu'un est à la recherche de la solution de gros essayer ceci après la mise en votre classe en tant que délégué de l'instance QTCaptureView:

- (CIImage *)view:(QTCaptureView *)view willDisplayImage:(CIImage *)image { 
//mirror image across y axis 
return [image imageByApplyingTransform:CGAffineTransformMakeScale(-1, 1)]; 
} 
+0

Vous avez sauvé ma journée, merci beaucoup. – sidyll

+0

vous êtes mon héros –

0

Essayez ceci! il appliquera des filtres à CaptureView, mais pas à la vidéo de sortie.

- (IBAction)Vibrance:(id)sender 
{ 
    CIFilter* CIVibrance = [CIFilter filterWithName:@"CIVibrance" keysAndValues: 
          @"inputAmount", [NSNumber numberWithDouble:2.0f], 
          nil]; 
    mCaptureView.contentFilters = [NSArray arrayWithObject:CIVibrance]; 
} 

BTW, vous pouvez appliquer des filtres de cette ref: https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CoreImageFilterReference/Reference/reference.html