微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

macos – CIColorClamp在OS X El Capitan中无法正常工作

我正在使用 Swift进行一些视频处理.升级到El Capitan(和Swift 2)后,我的代码破了.我将错误追溯到CIFilter函数CIColorClamp.该函数应该用于钳制像素值,但实际上会影响图像范围.
let _c:CGFloat = 0.05
    let minComp = CIVector(x:_c,y:_c,z:_c,w: 1)
    let maxComp = CIVector(x:1,y:1,z:1,w: 1)
    let clamp: CIFilter = CIFilter(name: "CIColorClamp")!
    print("clamp-in \(image.extent)")
    clamp.setDefaults()
    clamp.setValue(image,forKey: kCIInputimageKey)
    clamp.setValue(minComp,forKey: "inputMinComponents")
    clamp.setValue(maxComp,forKey: "inputMaxComponents")
    print("clamp-out \(clamp.outputimage!.extent)")

上面的代码产生输出

> clamp-in (6.0,6.0,1268.0,708.0)
CoreAnimation: Warning! CaimageQueueSetowner() is deprecated and does nothing. Please stop calling this method.
> clamp-out (-8.98846567431158e+307,-8.98846567431158e+307,1.79769313486232e+308,1.79769313486232e+308)

调用产生内部警告的事实也不会灌输信心!

谁能证实这种行为?我究竟做错了什么?

我也碰到了这个问题.程度始终如此设定

-8.98846567431158e+307,1.79769313486232e+308

但后来我尝试调用filter.debugDescription并认识到在sourceImage中的范围是正确的.

这是我的解决方法.因为我使用不同的过滤器,我问过滤器名称是否为’CIColorClamp’然后我将CGImageRef中使用的范围设置为原始图像的值.

var extent = filteredImage.extent
if filter.name == "CIColorClamp" {
    extent = sourceImage.extent
}
let cgImage:CGImageRef = context.createCGImage(filteredImage,fromrect: extent)
UIImageJPEGRepresentation(UIImage(CGImage: cgImage),1.0).writetoFile(...)

在该修复之前,我总是遇到崩溃导致无法创建UIImageJPEGRepresentation,导致错误的范围值.

因此,看起来该范围不会转移到过滤后的图像.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐