2009-05-04 45 views
2

我需要水平翻轉一些我正在預覽和捕捉的視頻。 A-la iChat,我有一個網絡攝像頭,並希望它看起來好像用戶正在看鏡子。翻轉Quicktime預覽和捕捉

我在QTCaptureView中預覽Quicktime視頻。我的捕捉是逐幀完成的(出於我不會進入的原因),如下所示:

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

任何提示?

回答

3

你可以通過捕獲從捕獲獲得的CIImage並通過核心圖像過濾器運行它來翻轉圖像。然後,您會將生成的圖像傳遞到您的圖像代表而不是原始圖像。該代碼看起來像這樣:

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

這看起來像`QTCaptureView`它可能會記錄工作,但怎麼樣? – Dan 2009-05-04 19:46:56

+0

類似這樣的東西可能會工作,使用與上述flipFilter變量相同的設置: [captureView setWantsLayer:YES]; captureView.layer.filters = [NSArray arrayWithObject:flipFilter]; – 2009-05-05 23:17:52

10

沒有像復活老問題。無論如何,我來到這裏,幾乎發現我一直在尋找感謝布賴恩·韋伯斯特但如果有人正在尋找一攬子解決方案設置你的類爲QTCaptureView實例的委託後,試試這個:

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

試試這個! 它將過濾器應用於CaptureView,但不適用於輸出視頻。

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

順便說一句,你可以從這個裁判施加任何過濾器:https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CoreImageFilterReference/Reference/reference.html