Горизонтальный переворот рамы в объективном
-
23-10-2019 - |
Вопрос
Я пытаюсь создать фильтр для моей программы (которая транслирует веб -камеру), которая заставляет раму перевернуть горизонтально, заставляя веб -камеру действовать как зеркало.
Однако, хотя он собирает и запускается, фильтр, похоже, не оказывает на него никакого влияния.
Вот код:
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? Я оглянулся, но я не нашел никаких ответов. Спасибо!
Решение
Я не уверен, что это проблема, но в вашем первом фрагменте кода вы устанавливаете два разных значения для одного и того же ключа (вы устанавливаете 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];
Другие советы
CIImage *cimage = [[CIImage alloc] initWithImage:image];
Вы не распределяете объект Ciimage. Попробуйте этот код.