如何解决CIAreaHistogram 不返回预期结果
我想获得 CIAreaHistogram
的 UIImage
。
下面我复制我运行的代码。 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 举报,一经查实,本站将立刻删除。