将UIImage转换为CGImage以获得像素颜色

时间:2016-01-24 20:39:20

标签: ios swift uiimage cgimage

基于此问题的代码(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 个答案:

答案 0 :(得分:1)

非常直接。根据此处的代码,您确实在展开nil对象。您的实例变量image永远不会被初始化为任何内容......因此您尝试使用!强制解包它,但它实际上是nil