我知道有很多关于如何获取给定
非常感谢您的建议或评论。谢谢!
编辑 我尝试了@Mukesh的解决方案,虽然所有的构建错误都已经修复,但程序仍然崩溃。它显示:
我检查过传递给函数的图像不是
附言:我正在使用相机的快照作为该函数的输入。我有一个实时相机,在每帧之后,我调用这个函数(下面的代码)将当前帧转换为
有没有办法找出为什么它得到了一个
CGPoint
中UIImage
的像素颜色的帖子,但据我所知它们都已经过时了。大部分内容包含CGImageGetDataProvider
和CGDataProviderCopyData
,但在Swift 4中会出现错误:
'CGImageGetDataProvider'已被属性'CGImage.dataProvider'替代 'CGDataProviderCopyData'已被属性'CGDataProvider.data'替代
Xcode建议使用这些替代方法,但它们并不存在,因此我一直在努力尝试重新创建一个Swift 4函数来获取UIImage
中像素的颜色。
以下是典型的Swift 3函数:
extension UIImage {
subscript (x: Int, y: Int) -> UIColor? {
if x < 0 || x > Int(size.width) || y < 0 || y > Int(size.height) {
return nil
}
let provider = CGImageGetDataProvider(self.cgImage!)
let providerData = CGDataProviderCopyData(provider!)
let data = CFDataGetBytePtr(providerData)
let numberOfComponents = 4
let pixelData = ((Int(size.width) * y) + x) * numberOfComponents
let r = CGFloat(data![pixelData]) / 255.0
let g = CGFloat(data![pixelData + 1]) / 255.0
let b = CGFloat(data![pixelData + 2]) / 255.0
let a = CGFloat(data![pixelData + 3]) / 255.0
return UIColor(red: r, green: g, blue: b, alpha: a)
}
}
非常感谢您的建议或评论。谢谢!
编辑 我尝试了@Mukesh的解决方案,虽然所有的构建错误都已经修复,但程序仍然崩溃。它显示:
![](https://istack.dev59.com/m66hT.webp)
nil
。
附言:我正在使用相机的快照作为该函数的输入。我有一个实时相机,在每帧之后,我调用这个函数(下面的代码)将当前帧转换为
UIImage
。这个UIImage
就是我想要找到像素颜色的对象:func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
let pixelBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!
let ciImg = CIImage(cvPixelBuffer: pixelBuffer)
let cameraImage = UIImage(ciImage: ciImg)
let col = cameraImage.getPixelColor(pos: CGPoint(x: 100, y: 100))
}
我使用 CGPoint(x: 100, y: 100)
作为示例来测试,结果程序崩溃了。这个点在图片中也存在,否则代码会返回 nil
:
if x < 0 || x > Int(size.width) || y < 0 || y > Int(size.height) {
return nil
}
有没有办法找出为什么它得到了一个
nil
值?或者也许有一个不同的解决方案?谢谢 :)
let provider = self.cgImage!.dataProvider let providerData = provider!.data
- Mukesh