2011-01-24 8 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を2回設定)に2つの異なる値を設定していますが、最初は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"]; 

また、あなたはあなたがCIImageオブジェクトを割り当てていない画像

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

素晴らしい。それがトリックです!ありがとう! :D – Moonlight293

+0

注:これはOS Xのソリューションです.iOSでは、NSAffineTransformの代わりにNSValueを使用する必要があります。 '[NSValue valueWithBytes:&flipTransform objCType:@encode(CGAffineTransform)];' –

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

の幅でX軸を変換する必要があるかもしれません。 このコードを試してください。

関連する問題