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) 此调用产生内部警告的事实也不会灌输信心! 谁能证实这种行为?我究竟做错了什么?
我也碰到了这个问题.程度始终如此设定
但后来我尝试调用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,导致错误的范围值. 因此,看起来该范围不会转移到过滤后的图像. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |