我想找到屏幕中间的像素颜色。
extension UIImage {
func getPixelColor(atLocation location: CGPoint, withFrameSize size: CGSize) -> UIColor {
let pixelPlace: CGPoint = CGPoint(x: location.x, y: location.y)
let pixelData = self.cgImage!.dataProvider!.data
let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)
let pixelIndex: Int = ((Int(self.size.width) * Int(pixelPlace.y)) + Int(pixelPlace.x)) * 4
let r = CGFloat(data[pixelIndex])// / CGFloat(255.0)
let g = CGFloat(data[pixelIndex+1])// / CGFloat(255.0)
let b = CGFloat(data[pixelIndex+2])// / CGFloat(255.0)
let a = CGFloat(data[pixelIndex+3])// / CGFloat(255.0)
return UIColor(red: r, green: g, blue: b, alpha: a)
}
}
然后用这个打印颜色。
let place = CGPoint(x: self.view.center.x , y: self.view.center.y)
print(yourImageView.image!.getPixelColor(atLocation: place, withFrameSize: self.view.frame.size))
如何获得中心像素的颜色?我不断获得其他颜色值,而不是中心的颜色值。颜色检测功能正常,所以我不相信问题来自于此。
我改变了什么(同样的问题仍然存在)
extension UIView {
func getColor(at point: CGPoint) -> UIColor{
let pixel = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: 4)
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)
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)
self.layer.render(in: context)
let color = UIColor(red: CGFloat(pixel[0]),
green: CGFloat(pixel[1]),
blue: CGFloat(pixel[2]),
alpha: CGFloat(pixel[3]))
pixel.deallocate(capacity: 4)
return color
}
}
我这样访问它
let loc = CGPoint(x: yourImageView.center.x, y: yourImageView.center.y)
var color = yourImageView.getColor(at: loc)
print(color)