Domanda

Devo girare orizzontalmente alcuni video che sto visualizzando in anteprima e catturo. A-la iChat, ho una webcam e voglio che appaia come se l'utente si stesse guardando in uno specchio.

Sto visualizzando l'anteprima del video Quicktime in un QTCaptureView . La mia cattura viene eseguita fotogramma per fotogramma (per motivi per cui non entrerò) con qualcosa del tipo:

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

Qualche consiglio?

È stato utile?

Soluzione

Puoi farlo prendendo il CIImage che stai ottenendo dalla cattura ed eseguendolo attraverso un filtro Core Image per capovolgere l'immagine. Passeresti quindi l'immagine risultante nel tuo rappresentante di immagini anziché in quello originale. Il codice sarebbe simile a:

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

Altri suggerimenti

Niente come resuscitare una vecchia domanda. Comunque sono venuto qui e ho quasi trovato quello che stavo cercando grazie a Brian Webster, ma se qualcuno è alla ricerca della soluzione all'ingrosso prova questo dopo aver impostato la tua classe come delegato dell'istanza QTCaptureView :

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

Prova questo! applicherà i filtri a CaptureView, ma non al video di output.

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

tra l'altro, puoi applicare qualsiasi filtro da questo riferimento: https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CoreImageFilterReference/Reference/reference.html

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