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!
UIS R170 G2安装centos启动报Attempt to access block outside partition