2011-01-24 74 views
4

我正在嘗試爲我的程序(使網絡攝像頭流動)創建一個過濾器,這會使幀水平翻轉,從而使網絡攝像頭像鏡子一樣工作。水平翻轉一個幀在Objective-C

但是,它編譯並運行時,過濾器似乎沒有任何影響。

下面是代碼:

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

奇怪的是,其他過濾器已工作。例如:

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

這與NSAffineTransform有關嗎?我環顧四周,但我還沒有找到任何答案。 感謝堆!

回答

8

我不確定這是否是問題,但在您的第一個代碼段中,您爲相同的密鑰設置了兩個不同的值(您設置了inputTransform兩次),我認爲第一個應該是inputImage。而不是嘗試以下操作:

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

此外,您可能需要通過圖像

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

太棒了。這是訣竅!感謝堆! :D – Moonlight293 2011-01-24 02:59:03

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

您還沒有分配CIImage對象的寬度,以X軸平移。 試試此代碼。