CIAreaHistogram 不返回预期结果

问题描述

我想获得 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
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)