gpt4 book ai didi

ios - CIColorMatrix 过滤器结果很奇怪

转载 作者:可可西里 更新时间:2023-11-01 01:35:36 30 4
gpt4 key购买 nike

我正在尝试创建一个 CIFilter 来转换以下 QR 码:

enter image description here

收件人:

enter image description here

这是我正在使用的代码:

let invert = CIFilter(name: "CIColorInvert")
invert!.setDefaults()
invert!.setValue(ciImage, forKey: "inputImage")

let filter = CIFilter(name: "CIColorMatrix")
filter?.setDefaults()
filter?.setValue(invert?.outputImage, forKey: kCIInputImageKey)

let r = CGFloat(70.0/255.0)
let g = CGFloat(224.0/255.0)
let b = CGFloat(182.0/255.0)

filter?.setValue(CIVector(x: r, y: 0, z: 0, w: 0), forKey: "inputRVector")
filter?.setValue(CIVector(x: 0, y: g, z: 0, w: 0), forKey: "inputGVector")
filter?.setValue(CIVector(x: 0, y: 0, z: b, w: 0), forKey: "inputBVector")
filter?.setValue(CIVector(x: 0, y: 0, z: 0, w: 1), forKey: "inputAVector")

代码所做的是首先反转正常的 QR 码,使其成为白底黑字,然后获取该图像并对其应用滤镜。代码的结果是这样的:

enter image description here

这不是我想要的颜色。如果有任何帮助,我将不胜感激!

谢谢!

最佳答案

您可以使用以下方法之一使用coreImage实现二维码滤镜效果

输出:

enter image description here

方法一: 使用自定义过滤器

第 1 步: 为您的自定义内核 创建单独的,如下所示。

class CustomFilter: CIFilter {
var inputImage: CIImage?

override public var outputImage: CIImage! {
get {
if let inputImage = self.inputImage {
let args = [inputImage as AnyObject]
return createCustomKernel().apply(withExtent: inputImage.extent, arguments: args)
} else {
return nil
}
}
}
}


func createCustomKernel() -> CIColorKernel {
let kernelString =
"kernel vec4 chromaKey( __sample s) { \n" +
" vec4 newPixel = s.rgba;" +
" newPixel[0] = 0.0;" +
" newPixel[2] = newPixel[2] / 2.0;" +
" return newPixel;\n" +
"}"
return CIColorKernel(string: kernelString)!
}

在您的 ViewController 中,您可以如下声明您的自定义过滤器。

 var context = CIContext(options: nil)

func customQRFilter() {

let myInvertFilter = CIFilter(name: "CIColorInvert")
myInvertFilter!.setValue(CIImage(image: imageView.image!), forKey: kCIInputImageKey)
let output = myInvertFilter!.outputImage

let filter = CustomFilter()
filter.setValue(output, forKey: kCIInputImageKey)

// Get the filtered output image and return it
let outputImage = filter.outputImage!
let cgimg = context.createCGImage(outputImage,from: output!.extent)
let processedImage = UIImage(cgImage: cgimg!)
imageView.image = processedImage
}

方法 2: 使用 CIColorMatrix 滤镜。

    func colorMatrixFilter() {

let myInvertFilter = CIFilter(name: "CIColorInvert")
myInvertFilter!.setValue(CIImage(image: imageView.image!), forKey: kCIInputImageKey)
let output = myInvertFilter!.outputImage

let filter = CIFilter(name: "CIColorMatrix")
filter?.setDefaults()
filter?.setValue(output, forKey: kCIInputImageKey)

let r = CGFloat(0.0)
let g = CGFloat(0.9)
let b = CGFloat(0.416)

filter?.setValue(CIVector(x: r, y: 0, z: 0, w: 0), forKey: "inputRVector")
filter?.setValue(CIVector(x: 0, y: g, z: 0, w: 0), forKey: "inputGVector")
filter?.setValue(CIVector(x: 0, y: 0, z: b, w: 0), forKey: "inputBVector")
filter?.setValue(CIVector(x: 0, y: 0, z: 0, w: 1), forKey: "inputAVector")

let outputs = filter?.outputImage
let cgimg = context.createCGImage(outputs!,from: output!.extent)
let processedImage = UIImage(cgImage: cgimg!)
imageView2.image = processedImage
}

注意:我建议您使用颜色选择器工具来选择您想要的任何颜色的RGB值

关于ios - CIColorMatrix 过滤器结果很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38087255/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com