加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 02:23:46 所属栏目:百科 来源:网络整理
导读:我正在使用 Swift进行一些视频处理.升级到El Capitan(和Swift 2)后,我的代码破了.我将错误追溯到CIFilter函数CIColorClamp.该函数应该用于钳制像素值,但实际上会影响图像范围. let _c:CGFloat = 0.05 let minComp = CIVector(x:_c,y:_c,z:_c,w: 1) let maxCo
我正在使用 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,导致错误的范围值.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读