Горизонтальное отражение кадра в Objective-C - PullRequest
4 голосов
/ 24 января 2011

Я пытаюсь создать фильтр для моей программы (который транслирует веб-камеру), который заставляет кадр переворачиваться горизонтально, заставляя веб-камеру вести себя как зеркало.

Однако, пока он компилируется и работает, фильтркажется, не оказывает никакого влияния на это.

Вот код:

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?Я посмотрел вокруг, но я не нашел никаких ответов.Спасибо, куча!

Ответы [ 2 ]

8 голосов
/ 24 января 2011

Я не уверен, что это проблема, но в своем первом фрагменте кода вы устанавливаете два разных значения для одного и того же ключа (вы устанавливаете 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"];

Также вам может потребоваться перевести ось X на ширину изображения

[flipTransform translateXBy:... yBy:0];
1 голос
/ 01 февраля 2012
CIImage *cimage = [[CIImage alloc] initWithImage:image];

Вы не выделяете объект CIImage. Попробуйте этот код.

...