2011-01-24 4 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

+0

참고 : 이것은 OS X 용 솔루션입니다. iOS에서는 NSAffineTransform 대신 NSValue를 사용해야합니다. [NSValue valueWithBytes : & flipTransform objCType : @encode (CGAffineTransform)]; –

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

당신은 CIImage 개체를 할당하지 않는의 폭에 의해 X 축 번역해야 할 수도 있습니다. 이 코드를 시도해보십시오.