i单击图像以返回像素颜色。这效果很好,但我发现它在iPhone5上不起作用。它在iPhone 5S,5SE和所有其他尺寸上都可以使用。我不懂为什么。以下代码将红色和蓝色作为iPhone 5上的NAN。
// returns the color data of the pixel at the currently selected point
func getPixelColorAtPoint(_ point:CGPoint)-> UIColor{
let pixel = UnsafeMutablePointer<CGFloat>.allocate(capacity: 4)
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)
if let context = CGContext(data: pixel, width: 1, height: 1, bitsPerComponent: 8, bytesPerRow: 4, space: colorSpace, bitmapInfo: bitmapInfo.rawValue){
context.translateBy(x: -point.x, y: -point.y)
torsoImage.layer.render(in: context)
}
let pColor:UIColor = UIColor(red: CGFloat(pixel[0])/255.0, green: CGFloat(pixel[1])/255.0, blue: CGFloat(pixel[2])/255.0, alpha: CGFloat(pixel[3])/255.0)
pixel.deallocate(capacity: 4)
print("Colour touch is (pColor)")
return pColor
}
//Colour touch is UIExtendedSRGBColorSpace nan 1.94443e+12 nan 1.48678e-42
CGContext(data: pixel, width: 1, height: 1, bitsPerComponent: 8, bytesPerRow: 4, ...)
创建一个图形上下文,该上下文由四个 bytes (每个颜色组件(备份,因此您必须传递UInt8
的数组:
let pixel = UnsafeMutablePointer<UInt8>.allocate(capacity: 4)
在您的情况下发生的事情是,将设置第一个CGFloat
的前4个字节,所有其余数据均为 undfined (并且可能导致nan
或某些任意值(。即使你不得到 nan
,值将是错误的。