由于我也面临着类似的问题,所以经过一番探索,我来到了这里.
代码:
//On the top of your swift
extension UIImage {
func getPixelColor(pos: CGPoint) -> UIColor {
let pixelData = CGDataProviderCopyData(CGImageGetDataProvider(self.CGImage))
let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)
let pixelInfo: Int = ((Int(self.size.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)
return UIColor(red: r, green: g, blue: b, alpha: a)
}
}
这种方法会从图像的CG图像中选取像素 colored颜色 .因此,确保你从正确的图像中 Select .e、 g.如果你的UIImage是200x200,但是Imgaes的原始图像文件.xcassets或它来自的任何地方,都是400x400,你是在拾取点(100100),你实际上是在图像的左上角拾取点,而不是在中间.
两种解决方案:
//Make sure only 1x image is set
let image : UIImage = UIImage(named:"imageName")
//Make sure point is within the image
let color : UIColor = image.getPixelColor(CGPointMake(xValue, yValue))
2、按比例上下zoom 以匹配UIImage.e、 g.let point = CGPoint(100,100)
在上面的例子中,
let xCoordinate : Float = Float(point.x) * (400.0/200.0)
let yCoordinate : Float = Float(point.y) * (400.0/200.0)
let newCoordinate : CGPoint = CGPointMake(CGFloat(xCoordinate), CGFloat(yCoordinate))
let image : UIImage = largeImage
let color : UIColor = image.getPixelColor(CGPointMake(xValue, yValue))
我只测试了第一种方法,我正在使用它从调色板中获得一种 colored颜色 .两者都应该有效.