2014-07-15 9 views
0

나는 스포트라이트 효과를 얻으려고합니다. 나는 어떤 코드가 the Apple CoreImageFilterReference을 기반으로 작성했지만 작동하지 않는 것 같습니다. filter 개체는 nil (분명히 outputImage, newImagenil 임)이지만 ciImage은 괜찮습니다.CISpotLight 필터 및 결과 없음

CIVector *inputLightPointsAt = [CIVector vectorWithX:20.f Y:20.f Z:5.f]; 
CIColor *inputColor = [[CIColor alloc] initWithColor:[UIColor redColor]]; 
CIImage *ciImage = [CIImage imageWithCGImage:[UIImage imageNamed:@"image"].CGImage]; 

CIFilter *filter = [CIFilter filterWithName:@"CISpotLight" keysAndValues: 
              kCIInputImageKey, ciImage, 
              @"inputBrightness", @1.5f, 
              @"inputConcentration", @0.5f, 
              @"inputColor", inputColor, 
              @"inputLightPosition", inputLightPointsAt, 
              @"inputLightPointsAt", inputLightPointsAt, 
              nil]; 
CIImage *outputImage = [filter outputImage]; 
UIImage *newImage = [UIImage imageWithCIImage:outputImage]; 

누구나 내가 뭘 잘못하고 있는지 알 수 있습니까? 어떻게 작동 시키는가?

BTW : 필터를 세피아 등의 다른 것으로 변경했을 때 모든 것이 잘 작동했습니다.

CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone" keysAndValues: 
         kCIInputImageKey, ciImage, 
         @"inputIntensity", @0.8, 
         nil]; 
+0

@MidhunMP 글쎄,'ciImage'를 출력 할 때 나는 '을 얻을 수 있으므로 반드시 그렇지 않습니다. 또한 CoreImage 프레임 워크를 작업 공간에 추가하고 클래스에 가져 왔습니다. 다른 생각 : /? 또한 필터 출력을 변경하고 필터가 0이 아닌 경우 편집을 참조하십시오. 'ciImage'가 문제가된다면 두 필터 모두 nil이됩니다. – Vive

답변

0

는 지금까지 내가 태그에서 볼 수 있듯이, 당신의 목표는 아이폰 OS이며, 문서에 따라 :

Availability 
Available in OS X v10.4 and later. 

은 iOS에서 사용할 수 없습니다.

+0

정확합니다. OS X에서도 확인했습니다. –

+0

잘못된 정보입니다. Apple 설명서에서 OS X v10.4 이상 및 iOS 9 이상에서 사용 가능합니다. –

+0

@AbdulYasin 2014 년 7 월 15 일 최신 시스템은 iOS 7.x였습니다. 2014 년 9 월 18 일에 Apple은 iOS 8을 출시했습니다. iOS9 (2016)의 CISpotLight 효과에 대한 지원이 추가되었습니다. 3 년 넘게 대답이 정확했습니다. 이제는 그렇지 않습니다. 그것을 지적 주셔서 감사합니다. – Neru

0

다른 사람이 도움을받을 수 있도록 늦게 답변을 게시했습니다.

사실 스포트라이트 필터는 약간 까다 롭습니다. 조심스럽게 빛의 위치를 ​​정해야합니다.

 let filter = CIFilter(name: "CISpotLight") 
     filter?.setDefaults() 
     filter?.setValue(inputImage, forKey: kCIInputImageKey) 
     filter?.setValue(CIVector(x: inputImage!.extent.size.width/2, y: inputImage!.extent.size.height/2, z: 60), forKey: "inputLightPointsAt") 
     filter?.setValue(2.5, forKey: kCIInputBrightnessKey) 
     filter?.setValue(0.1, forKey: "inputConcentration") 
     outputImage = filter?.outputImage 

여기 필터를 적용한 후 입력 이미지를 전달하고 출력 이미지를 가져 오는 중입니다.