我想使用 swift 将灰度线条艺术的所有白色背景更改为透明。我为 swift 实现了 RGB 色键文档:https ://developer.apple.com/documentation/coreimage/applying_a_chroma_key_effect
色调范围最初是绿色,有 R、G、B 和 alpha 参数
self.ChromaKeyFilter(fromHue: 0.3, toHue: 0.4)
,但对于灰度,根据苹果文档只有 2 个:白色,阿尔法。我想将极端的白色更改为透明,所以我只是将色调范围设置为 1。
class ChromaKey{
//Hue range
let whiteRange: CGFloat = 1
func getHue(white: CGFloat) -> CGFloat{
let color = UIColor(white: white, alpha: 1)
var hue: CGFloat = 0
color.getHue(&hue, saturation: nil, brightness: nil, alpha: nil)
return hue
}
func chromaKeyFilter(ridHue:CGFloat) -> CIFilter? {
let size = 64
var cubeGrey = [Float]()
for z in 0 ..< size{
let white = CGFloat(z)/CGFloat(size-1)
let hue = getHue(white: white)
let alpha: CGFloat = (hue == ridHue) ? 0:1
cubeGrey.append(Float(white * alpha))
cubeGrey.append(Float(alpha))
}
let data = Data(buffer: UnsafeBufferPointer(start: &cubeGrey, count: cubeGrey.count))
let colorCubeFilter = CIFilter(name: "CIColorCube", parameters: ["inputCubeDimension": size, "inputCubeData":data])
return colorCubeFilter
}
func filterPixels(foregroundCIImage: CIImage) -> CIImage {
let chromaCIFilter = self.chromaKeyFilter(ridHue: whiteRange)
chromaCIFilter?.setValue(foregroundCIImage, forKey: kCIInputImageKey)
let sourceCIImageWithoutBackground = chromaCIFilter?.outputImage
var image = CIImage()
if let filteredImage = sourceCIImageWithoutBackground{
image = filteredImage
}
return image
}
chromakey 的函数。当我应用函数时,什么都没有出现。