2016-10-25 3 views
0

ImageView에서 CIBoxBlur 필터를 사용하여 흐림 효과를 얻으려고합니다. UISlider를 사용하여 흐림 값을 제어하고 있습니다. 흐림 효과는 슬라이더 값을 증가시킬 때 작동합니다. 나는 분명히 imageView.But에 적용하는 흐림 값을 볼 수 있습니다. 그러나 슬라이더 값을 감소 시키면 흐림 효과가 더 깊어 져서 imageView.ImageView가 정상으로 돌아 가지 않습니다. 왜 그런지 알 수 있습니다. 그러나 어떻게 수정해야하는지 잘 모르겠습니다. 그것.스위프트에서 슬라이더를 사용하여 컨트롤 ciFilter

@IBOutlet weak var blur: UISlider! 

@IBAction func blurSlider(_ sender: UISlider) { 

    let currentValue = Int(sender.value) 
    blur.maximumValue = 5 
    blur.minimumValue = 0 

    let currentFilter = CIFilter(name: "CIBoxBlur") 
    currentFilter!.setValue(CIImage(image: imageView.image!), forKey: kCIInputImageKey) 
    currentFilter!.setValue(currentValue, forKey: kCIInputRadiusKey) 

    let cropFilter = CIFilter(name: "CICrop") 
    cropFilter!.setValue(currentFilter!.outputImage, forKey: kCIInputImageKey) 
    cropFilter!.setValue(CIVector(cgRect: (CIImage(image: imageView.image!)?.extent)!), forKey: "inputRectangle") 

    let output = cropFilter!.outputImage 
    let cgimg = context.createCGImage(output!, from: output!.extent) 
    let processedImage = UIImage(cgImage: cgimg!) 
    imageView.image = processedImage 

} 

감사합니다.

답변

1

매우 간단합니다. 이미 필터링 된 이미지 대신 원본 이미지에 필터를 적용 할 수 있습니다. 이 코드가 도움이 될 것입니다.

@IBAction func blurSlider(_ sender: UISlider) { 
    let originalImage = UIImage(named: "yourimage")// replace yourimage with the name of your image 
    let currentValue = Int(sender.value) 

    blur.maximumValue = 5 
    blur.minimumValue = 0 

    let currentFilter = CIFilter(name: "CIBoxBlur") 
    currentFilter!.setValue(CIImage(image: originalImage!), forKey: kCIInputImageKey) 
    currentFilter!.setValue(currentValue, forKey: kCIInputRadiusKey) 

    let cropFilter = CIFilter(name: "CICrop") 
    cropFilter!.setValue(currentFilter!.outputImage, forKey: kCIInputImageKey) 
    cropFilter!.setValue(CIVector(cgRect: (CIImage(image: originalImage!)?.extent)!), forKey: "inputRectangle") 

    let output = cropFilter!.outputImage 
    let cgimg = context.createCGImage(output!, from: output!.extent) 
    let processedImage = UIImage(cgImage: cgimg!) 
    imageView.image = processedImage 

} 
+0

이상하게 작동합니다. 하지만 내가 원하는 방식이 아니야 .. 감사합니다. – Joe