Pergunta

Eu preciso inverter horizontalmente algum vídeo que estou visualização e captura. A-la iChat, eu tenho uma webcam e quer que ele apareça como se o usuário está olhando em um espelho.

Estou visualização de vídeo Quicktime em um QTCaptureView. Meu captura é feito quadro a quadro (por razões que eu não vou entrar em) com algo como:

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

Todas as dicas?

Foi útil?

Solução

Você pode fazer isso tomando o CIImage você está recebendo a partir da captura e executá-lo através de um filtro Core Image para virar a imagem ao redor. Você, então, passar a imagem resultante em sua imagem representante em vez do original. O código seria algo parecido com:

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

Outras dicas

Nada como ressuscitar uma velha questão. De qualquer forma eu vim aqui e quase encontrei o que estava procurando graças a Brian Webster, mas se alguém está procurando a solução atacado tentar este depois de definir a sua classe como o delegado da instância QTCaptureView:

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

Tente isto! ele vai aplicar filtros para CaptureView, mas não para a saída de vídeo.

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

btw, você pode aplicar quaisquer filtros a partir deste ref: https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CoreImageFilterReference/Reference/reference.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top