将 UIImage 转换为 CGImage 以获取像素颜色
Posted
技术标签:
【中文标题】将 UIImage 转换为 CGImage 以获取像素颜色【英文标题】:Converting UIImage to CGImage to get Pixel Color 【发布时间】:2016-01-24 20:39:20 【问题描述】:根据来自这个问题 (How do I get the color of a pixel in a UIImage with Swift?) 的代码,我正在尝试在点击按钮时运行一个函数。到目前为止,这是我的代码:
@IBOutlet weak var graphImage: UIImageView!
var image : UIImage?
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
func getPixelColor(pos: CGPoint) -> UIColor
var pixelData = CGDataProviderCopyData(CGImageGetDataProvider(self.image!.CGImage))
var data : UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)
var pixelInfo : Int = ((Int(image!.size.width) * Int(pos.y) + Int(pos.x)*4))
let r = CGFloat(data[pixelInfo])
let g = CGFloat(data[pixelInfo]+1)
let b = CGFloat(data[pixelInfo]+2)
let a = CGFloat(data[pixelInfo]+3)
return UIColor(red: r, green: g, blue: b, alpha: a)
@IBAction func playTapped(sender: AnyObject)
var c : CGFloat = 100.0
var d : CGFloat = 100.0
getPixelColor(CGPoint(x:c,y:d))
但是,每当我在 ios 模拟器中点击播放按钮时,应用程序就会崩溃,并且我会在函数 getPixelColor 的第一行收到警告“致命错误:在展开可选值时意外发现 nil”。我在这里做错了什么/我需要添加什么?
【问题讨论】:
【参考方案1】:非常直接。根据此处的代码,您确实在解开 nil
对象。您的实例变量 image
从未初始化为任何内容...因此您尝试使用 !
强制解包它,但它实际上是 nil
。
【讨论】:
哦,不好意思,我忘了说,我调试的时候,image对象其实不是nil,但是变量pixelData是。我对编码很陌生,所以我不知道这是否意味着我的图像对象仍然不是问题。无论如何,我将如何初始化这个变量?我试着只是说“var image = graphImage”,但后来我在函数 getPixelColor 的第三行得到一个错误,说 UIImageView 没有成员大小。 没有进入你的项目的细节 - 关键是你的变量image
是nil
。这取决于你,或者另一个问题来找出原因。祝你好运!以上是关于将 UIImage 转换为 CGImage 以获取像素颜色的主要内容,如果未能解决你的问题,请参考以下文章
UIImage 在将其转换为 CIImage,然后转换为 CGImage 并返回 UIImage 时失去其方向
有啥方法可以在不将 CIImage 转换为 UIImage 或 CGImage 的情况下将 CIImage 转换为 NSData?