CIColorControls&;乌斯里德尔w/Swift 4

CIColorControls&;乌斯里德尔w/Swift 4,swift,uiimageview,Swift,Uiimageview,我试图使滑块影响UIImageView的亮度 我的出路和行动: @IBOutlet weak var previewImage: UIImageView! @IBAction func adjustBrightness(_ sender: UISlider) { let currentValue = CGFloat(sender.value) print(currentValue) let coreImage = CIImage(i

我试图使滑块影响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)
        }
     }
和我的最小/最大VAL:

我的图像变为纯白色,忽略滑块输入/sender.value vals。你知道我做错了什么吗


谢谢大家!

问题在于这一行:

previewImage.image = UIImage(ciImage: filteredImage)
您不能通过使用该初始值设定项从CIImage神奇地生成UIImage。您的图像视图显示为空,因为这样做可以有效地将其图像设置为
nil
。相反,必须渲染图像。例如,见我的答案

(苹果声称图像视图本身将在这种配置下呈现CIImage,但我从未见过这种说法得到证实。)


然而,我们可能会进一步指出,如果目标是允许用户移动滑块并实时更改图像的亮度,那么您的方法永远不会起作用。您根本不能使用UIImageView来显示这样做的图像,因为每次移动滑块时,我们都必须再次渲染,这非常缓慢。相反,您应该使用金属视图渲染到(如我的回答中所述);这是一种实时响应由滑块控制的CIFilter的方法。

问题在于这一行:

previewImage.image = UIImage(ciImage: filteredImage)
您不能通过使用该初始值设定项从CIImage神奇地生成UIImage。您的图像视图显示为空,因为这样做可以有效地将其图像设置为
nil
。相反,必须渲染图像。例如,见我的答案

(苹果声称图像视图本身将在这种配置下呈现CIImage,但我从未见过这种说法得到证实。)



然而,我们可能会进一步指出,如果目标是允许用户移动滑块并实时更改图像的亮度,那么您的方法永远不会起作用。您根本不能使用UIImageView来显示这样做的图像,因为每次移动滑块时,我们都必须再次渲染,这非常缓慢。相反,您应该使用金属视图渲染到(如我的回答中所述);这是实时响应由滑块控制的CIFilter的方法。

您需要一个介于-1和+1之间的值。谢谢Tamas。我累了,你的帖子似乎对我不起作用。还尝试将“最大最小值”设置为-1>1,该值应为0到1。零表示完全没有更改,一表示完全白色可能是@andehlu的重复。您在滑块中的每个chnage都会覆盖imageView中的图像,因此它将在每次重新运行操作时获得最后一次更改。您需要一个介于-1和+1之间的值。谢谢Tamas。我累了,你的帖子似乎对我不起作用。还尝试将“最大最小值”设置为-1>1,该值应为0到1。零表示完全没有更改,一表示完全白色可能是@andehlu的重复。您在滑块中的每个chnage都会覆盖imageView中的图像,因此它将在每次重新运行操作时获得最后一次更改。您创建了一个新的图像视图,并将filteredImage完美地呈现给它。非常感谢。输出方向似乎已逆时针旋转90度。关于为什么会发生这种情况,你有什么想法吗?是的,如果你只是搜索一下,你会发现这里讨论得很好。你失去了方向设置。-请不要忽略我以上答案的最后一段(刚刚添加)。如果你想让用户滑动滑块并让图像实时响应,你所做的将永远不会起作用。返回的图像不是零,它会用最后一次白色更改覆盖滑块的每次拖动OK谢谢你的帮助@matt我可以看到它动作相当缓慢。这是你例子中的金属版本吗?抱歉,刚才在你的回答中看到了你的更新。不,这是一种缓慢的方式。如果我没记错的话,金属视图应该是下一个例子。是的,创建了一个新的图像视图,并完美地渲染了filteredImage。非常感谢。输出方向似乎已逆时针旋转90度。关于为什么会发生这种情况,你有什么想法吗?是的,如果你只是搜索一下,你会发现这里讨论得很好。你失去了方向设置。-请不要忽略我以上答案的最后一段(刚刚添加)。如果你想让用户滑动滑块并让图像实时响应,你所做的将永远不会起作用。返回的图像不是零,它会用最后一次白色更改覆盖滑块的每次拖动OK谢谢你的帮助@matt我可以看到它动作相当缓慢。这是你例子中的金属版本吗?抱歉,刚才在你的回答中看到了你的更新。不,这是一种缓慢的方式。如果我没记错的话,金属视图应该是下一个例子。