CIAreaHistogram 不返回预期结果

时间:2021-03-11 11:16:16

标签: ios swift histogram core-image cifilter

我想获得 CIAreaHistogramUIImage

下面我复制我运行的代码。 print() 语句当前打印 255 行,其中 0.0 0.0 0.0 后跟最后一行是 0.0 0.0 0.058823529

我的 UIImage 输入也显示在屏幕上,所以我确定有图像。

我也在 CIFilter.io 应用程序中尝试过这个过滤器。奇怪的是,给定一个彩色输入图像,输出图像是一条单一的灰色线。我当然希望有一条线,但不是纯灰色。

我可能做错了什么?

let inputImage = CIImage(cgImage: outputImage!.cgImage!)
let histogramFilter = CIFilter(name: "CIAreaHistogram", parameters: [kCIInputImageKey : inputImage,
                                                                     "inputExtent" : inputImage.extent,
                                                                     "inputScale" : NSNumber(value: 1.0),
                                                                     "inputCount" : NSNumber(value: 256)])!

func processHistogram(ciImage: CIImage)
{
    let image = renderImage(ciImage: ciImage)

    for x in 0 ... 255
    {
        getPixelColor(fromCGImage: (image?.cgImage!)!, pos: CGPoint(x: x, y: 0))
    }
}

func getPixelColor(fromCGImage cgImage: CGImage, pos: CGPoint) -> UIColor
{
    let pixelData = cgImage.dataProvider!.data
    let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)

    let pixelInfo: Int = ((Int(cgImage.width) * Int(pos.y)) + Int(pos.x)) * 4

    let r = CGFloat(data[pixelInfo]) / CGFloat(255.0)
    let g = CGFloat(data[pixelInfo+1]) / CGFloat(255.0)
    let b = CGFloat(data[pixelInfo+2]) / CGFloat(255.0)
    let a = CGFloat(data[pixelInfo+3]) / CGFloat(255.0)

    print("\(r) \(g) \(b)")

    return UIColor(red: r, green: g, blue: b, alpha: a)
}

func renderImage(ciImage: CIImage) -> UIImage?
{
    var outputImage: UIImage?
    let size = ciImage.extent.size

    UIGraphicsBeginImageContext(size)
    if let context = UIGraphicsGetCurrentContext()
    {
        context.interpolationQuality = .high
        context.setShouldAntialias(true)

        let inputImage = UIImage(ciImage: ciImage)
        inputImage.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))

        outputImage = UIGraphicsGetImageFromCurrentImageContext()

        UIGraphicsEndImageContext()
    }

    return outputImage
}

0 个答案:

没有答案
相关问题