оттенки серого кеинга - PullRequest
       59

оттенки серого кеинга

1 голос
/ 29 января 2020

Я хотел изменить весь белый фон штрихового рисунка в оттенках серого на прозрачный, используя swift. Я реализовал документ RGB chromakey для swift: https://developer.apple.com/documentation/coreimage/applying_a_chroma_key_effect

Диапазон оттенков изначально был для зеленого цвета, и были параметры R, G, B и альфа

self.ChromaKeyFilter(fromHue: 0.3, toHue: 0.4)

, но для оттенков серого по документации Apple было только 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
    }

удовольствие c для кеинга. когда я применяю забаву c, ничего не появляется.

...