屏幕中央的快速颜色检测

时间:2017-09-30 17:10:03

标签: ios swift xcode colors

我想找到屏幕中间的像素颜色。

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)

0 个答案:

没有答案