问题描述
我想获得 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 (将#修改为@)