2016-06-24 6 views
1

커스텀 코어 이미지 필터를 쓰는 법을 배우고 있지만 색상 값이 0 - 1 일 때 렌더링 된 색상이 커널 코드에서 지정한 것과 같지 않은이 문제가 있습니다.커스텀 코어 이미지 필터 컬러 이슈

import UIKit 
class testFilter: CIFilter 
{ 
    // simply return half red color (0.5) 

    var colorKernel = CIColorKernel(string: 
     "kernel vec4 theFilter()" + 
     "{ return vec4(0.5, 0.0, 0.0, 1.0); }" 
    ) 

    override var outputImage: CIImage! 
    { 
     let rect = CGRect(x: 0, y: 0, width: 200, height: 100) 
     return colorKernel.applyWithExtent(rect,arguments: nil) 
    } 
} 

사용법 : 실제 적색 성분 값 arou 출력 화상이 보이는

class ViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     // generate image 
     let filter = testFilter() 
     let ciImage = f.outputImage  
     let image = UIImage(CIImage: ciImage) 

     // add to view 
     let v = UIImageView(frame: CGRect(x: 50, y: 50, width: 200, height: 100)) 
     v.image = image  
     view.addSubview(v) 
    } 
} 

이다

0 또는 1)

동일 이것은 내 필터 코드의 경우 정확한 190 번 (Photoshop을 사용하여 색상 값을 확인했습니다). 0.5 값에 대해 올바른 출력 값이 255 * 0.5 = 122.5라고 생각 했습니까? 커널은 (sRGB)의 곡선에 따라 색상을 만드는 당신이 선형 값을 기준으로 색상을 기대하고 있기 때문에 나는이를 생각하고

the output image

답변

1

이다. 필터 출력을

return colorKernel!.applyWithExtent(rect, arguments: nil)? 
        .imageByApplyingFilter("CISRGBToneCurveToLinear", withInputParameters: nil) 

으로 변경하여 출력 색상을 수정할 수 있습니다. 그런데 채널은 UInt8이므로 값은 정수이고 반값은 127입니다.