代码之家  ›  专栏  ›  技术社区  ›  barrylachapelle

cicolorcontrols&uislider w/swift 4[副本]

  •  0
  • barrylachapelle  · 技术社区  · 6 年前

    我正在尝试使滑块影响uiImageView的亮度。

    我的出路和行动:

    @iboutlet weak var previewimage:uiImageView!
    
    @IBaction func adjustbrightness(u sender:uislider){
    
    让currentValue=cgfloat(sender.value)
    打印(当前值)
    
    让coreimage=ciimage(image:previewimage.image!)
    
    let filter=cifilter(名称:“cicolorcontrols”)
    过滤器?.setvalue(coreimage,forkey:kciinputimagekey)
    过滤器?.setvalue(当前值,forkey:kciinputBrightnessKey)
    
    如果让ciimage=filter!OutuPimige{
    让filteredimage=ciimage
    previewimage.image=uiimage(ciimage:filteredimage)
    }
    }
    < /代码> 
    
    

    我的最小/最大值:

    我的图像变为纯白色,忽略滑块输入/sender.value VAL。对我在这里做错了什么有什么看法吗?

    谢谢![答:] 1答

  • Why can't I invert my image back to original with CIFilter in my Swift iOS app 1答
  • 我正在尝试使滑块影响uiImageView的亮度。

    我的出路和行动:

     @IBOutlet weak var previewImage: UIImageView!
    
        @IBAction func adjustBrightness(_ sender: UISlider) {
    
            let currentValue = CGFloat(sender.value)
            print(currentValue)
    
            let coreImage = CIImage(image: previewImage.image!)
    
            let filter = CIFilter(name: "CIColorControls")
            filter?.setValue(coreImage, forKey: kCIInputImageKey)
            filter?.setValue(currentValue, forKey: kCIInputBrightnessKey)
    
            if let ciimage = filter!.outputImage {
                let filteredImage = ciimage
                previewImage.image = UIImage(ciImage: filteredImage)
            }
         }
    

    我的最小/最大值: enter image description here

    我的图像变为纯白色,忽略滑块输入/sender.value VAL。对我在这里做错了什么有什么看法吗?

    谢谢您!

    1 回复  |  直到 6 年前
        1
  •  2
  •   matt    6 年前

    问题在于这一行:

    previewImage.image = UIImage(ciImage: filteredImage)
    

    您不能使用该初始值设定项从ciimage中神奇地生成uiimage。您的图像视图显示为空,因为您有效地将其图像设置为 nil 通过这样做。相反,你必须 提供 图像。例如,看我的答案 here .

    (苹果声称图像视图本身将呈现此配置中的ciimage,但我从未见过该声明经过验证。)

    但是,我们可能会进一步指出,如果目标是允许用户移动滑块并实时更改图像的亮度,那么您的方法将永远无法工作。不能使用uiImageView 完全 要显示将要执行此操作的图像,因为每次移动滑块时,都必须再次渲染,即 真的很慢 . 相反,您应该使用金属视图渲染(如我的回答中所述 here );这是对由滑块控制的CIFilter进行实时响应的方法。