首页 > 解决方案 > 在 ImageView 中点击时我没有捕捉到完美的 RGB 颜色

问题描述

在我的应用程序的 ImageView 中点击位置坐标时,我没有捕捉到完美的 RGB 颜色。我写了这个:

extension UIImage {
func getPixelColors(atLocation location: CGPoint, withFrameSize size: CGSize) -> UIColor {
    let x: CGFloat = (self.size.width) * location.x / size.width
    let y: CGFloat = (self.size.height) * location.y / size.height
    let pixelPoint: CGPoint = CGPoint(x: x, y: y)
    let pixelData = self.cgImage!.dataProvider!.data
    let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)
    let pixelIndex: Int = ((Int(self.size.width) * Int(pixelPoint.y)) + Int(pixelPoint.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)
    //let testColor = UIColor(red: r, green: g, blue: b, alpha: a)
    return UIColor(red: r, green: g, blue: b, alpha: a)
}

我调用 getPixelColors:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
      guard let touch = touches.first else {
 print("Error: touches is empty.")
 return
 }
 let location = touch.location(in: imgTarget)


 let pin = UIImageView(frame: CGRect(x: location.x - 14, y: location.y - 14, width: 30, height: 30))
 pin.image = UIImage(named: "gMarker")
 imgTarget.addSubview(pin)
 rgb = (imgTarget.image?.getPixelColors(atLocation: location, withFrameSize: imgTarget.frame.size))! }

如果我点击图像的中心部分,则 rgb 代码是正确的,离中心越远,误差越大

标签: iosswiftrgb

解决方案


推荐阅读