Custom CIFilter - CIColorCube - 不改变 UIImage

问题描述 投票:0回答:0

我制作了一个自定义的 CIColorCube 滤镜,将预定灰色阴影(均匀间隔,包括黑色和白色)的图像变成彩色图像,每个阴影变成不同的色调。 问题是 - 它要么不提供任何输出,要么返回完全不变的图像。 这是过滤器的代码:

class GreyToColoutrsFilterMaker{
static let FilterHaver = GreyToColoutrsFilterMaker()
let filter: CIFilter?
private init() {
    let size = Constants.SHADES_COUNT
    var cubeRGB = [Float]()
    for _ in 0 ..< size {
        for _ in 0 ..< size {
            for x in 0 ..< size {
                let red = CGFloat(x) / CGFloat(size-1)
                
                let hue = (1 - red) * 240 / 360
                let destColor = UIColor(hue: hue, saturation: 1, brightness: 1, alpha: 1)
                let colorParts = destColor.rgba
                cubeRGB.append(Float(colorParts.red))
                cubeRGB.append(Float(colorParts.green))
                cubeRGB.append(Float(colorParts.blue))
                cubeRGB.append(Float(colorParts.alpha))
            }
        }
    }
    let data = withUnsafeBytes(of: cubeRGB) { Data($0) }
    filter = CIFilter(name: "CIColorCube", parameters: ["inputCubeDimension": size, "inputCubeData": data])
}

这是我在 UIImage img 上使用它的方式:

if let filter = GreyToColoutrsFilterMaker.FilterHaver.filter{
            let ciImg = CIImage(image: img)
            filter.setDefaults()
            filter.setValue(ciImg, forKey: kCIInputImageKey)
            if let filteredImageData = filter.outputImage{
                let ciContext = CIContext(options: nil)
                if let filteredImageRef =   ciContext.createCGImage(filteredImageData, from: filteredImageData.extent){
                    img = UIImage(cgImage: filteredImageRef)
                }
            }
        }

如果去掉“filter.setDefaults()”这一行,那么“if let filteredImageData = filter.outputImage”里面的代码不会执行,说明filter没有返回任何数据。但是如果使用线条,则过滤器不会以任何方式改变图像。

ios swift image-processing uiimage core-image
© www.soinside.com 2019 - 2024. All rights reserved.