CIColorControls & UISlider w/Swift 4 [重复]

Posted

技术标签:

【中文标题】CIColorControls & UISlider w/Swift 4 [重复]【英文标题】:CIColorControls & UISlider w/ Swift 4 [duplicate] 【发布时间】:2018-11-26 21:06:36 【问题描述】:

我正在尝试让滑块影响 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)
        
     

和我的最小/最大 vals:

我的图像变成纯白色并忽略滑块 input/sender.value 值。关于我在这里做错了什么有什么想法吗?

谢谢!

【问题讨论】:

您需要一个介于 -1 和 +1 之间的值。 谢谢塔马斯。我厌倦了您帖子上的修复似乎对我不起作用。还尝试将 max min 设置为 -1 > 1 应该是从0到1。0表示完全没有变化,1表示全白 可能与***.com/questions/32875114/…重复 @andehlu 你会覆盖 imageView 中的图像每个滑块中的变化,这样它就会在每次重新运行动作时获得最后的变化 【参考方案1】:

问题出在这一行:

previewImage.image = UIImage(ciImage: filteredImage)

您不能通过使用该初始化程序神奇地从 CIImage 中生成 UIImage。您的图像视图显示为空,因为您通过这样做有效地将其图像设置为nil。相反,您必须渲染 CIImage。例如,请参阅我的回答 here。

(Apple 声称图像视图本身将在此配置中呈现 CIImage,但我从未见过该声明得到验证。)

但是,我们可能会更进一步指出,如果目标是允许用户移动滑块并实时更改图像的亮度,那么您的方法永远不会奏效。你不能使用 UIImageView 来显示一个可以做到这一点的图像,因为每次移动滑块时,我们都必须重新渲染,这真的很慢。相反,您应该使用 Metal 视图进行渲染(如我的回答 here 中所述);这是实时响应由滑块控制的 CIFilter 的方式。

【讨论】:

是的,它创建了一个新的图像视图并将过滤后的图像完美地呈现给它。谢谢你。输出方向似乎已经旋转了 90 CCW。关于为什么会发生这种情况的任何想法? 是的,如果你只搜索它,你会发现它已经在这里得到了很好的讨论。您丢失了方向设置。 —请不要忽略我上面答案的最后一段(刚刚添加)。如果您希望用户滑动滑块并让图像实时响应,那么您所做的将永远不会奏效。 返回的图片不是 nil ,每次拖动滑块都会覆盖最后一次白色变化 好的,感谢您的帮助@matt 我可以看到它表现得很缓慢。这是您示例中的金属版本吗? github.com/mattneub/Programming-ios-Book-Examples/blob/master/… 抱歉刚刚在您的回答中看到您的更新。 不,这是缓慢的方式。如果我没记错的话,金属视图应该是下一个例子。

以上是关于CIColorControls & UISlider w/Swift 4 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

CQRS, Task Based UIs, Event Sourcing agh!

react-交互-异步uis

UIS R170 G2安装centos启动报Attempt to access block outside partition

复制粘贴引发的鸠占鹊巢——IDEA复制项目导致sources root复用了另一个项目

qt 怎么打开cmakelist

C语言小游戏 贪吃蛇