ios - 在 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 代码是正确的,离中心越远,误差越大
解决方案
推荐阅读
- php - 如何在后端的php中将大文件上传到onedrive
- python - 手动删除文件后连续保存文件到目录
- youtube - YouTube 数据 API 的问题:有时会崩溃并且无法正常工作
- api - 如何在使用 POSTMAN 发送另一个请求之前触发请求
- symfony - Symfony 和 Doctrine 在不同项目上的交流
- python - Ansible 和 python 实现
- android - Android 单元测试 Mockito 返回 null
- c# - 如何从 .NET Core 中的 appsettings.json 读取节值
- java - 如何使用单选按钮更改android应用程序中的设置?
- mysql - 从 MySQL 获取每小时数据