如何获取 UIImage 中像素的颜色?
Posted
技术标签:
【中文标题】如何获取 UIImage 中像素的颜色?【英文标题】:How do I get the color of a pixel in a UIImage? 【发布时间】:2021-01-06 00:06:02 【问题描述】:所以我正在尝试制作一个程序,让我在其中拍照并告诉用户颜色是什么。我在实现 func getPixelColor 的部分时遇到了麻烦。谁能给我一些关于如何将这个程序融合在一起的提示?
import UIKit
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate
@IBOutlet weak var cameraButton: UIButton!
@IBOutlet weak var cameraView: UIImageView!
@IBOutlet weak var photosButton: UIButton!
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
@IBAction func tappedCameraButton(_ sender: Any)
let picker = UIImagePickerController()
picker.sourceType = .camera
picker.allowsEditing = true
picker.delegate = self
present(picker, animated: true)
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any])
cameraView?.image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage
picker.dismiss(animated: true, completion: nil)
extension UIImage
func getPixelColor(pos: CGPoint) -> UIColor
let pixelData = self.cgImage!.dataProvider!.data
let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)
let pixelInfo: Int = ((Int(self.size.width) * Int(pos.y)) + Int(pos.x)) * 4
let r = CGFloat(data[pixelInfo]) / CGFloat(255.0)
let g = CGFloat(data[pixelInfo+1]) / CGFloat(255.0)
let b = CGFloat(data[pixelInfo+2]) / CGFloat(255.0)
let a = CGFloat(data[pixelInfo+3]) / CGFloat(255.0)
return UIColor(red: r, green: g, blue: b, alpha: a)
【问题讨论】:
请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange 网络上发帖,您已在 CC BY-SA 4.0 license 下授予 Stack Exchange 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work? 【参考方案1】:你需要获取用户触摸的CGPoint
,然后使用getPixelColor(pos:)
获取颜色。
有两种方式获取CGPoint
您可以使用任何一种方法来获取位置touchesBegan(_:with:), touchesMoved, touchesEnded
使用点击手势
这是获取CGPoint
的StackOverlow代码:How to get a CGPoint from a tapped location?
【讨论】:
您需要在显示图像的那个 vc 中实现这些方法【参考方案2】:extension UIImage
func getPixelColor(pos: CGPoint) -> UIColor?
guard let cgImg = cgImage, let provider = cgImg.dataProvider else
return nil
let pixelData = provider.data
let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)
let pixelInfo: Int = ((Int(self.size.width) * Int(pos.y)) + Int(pos.x)) * 4
let r = CGFloat(data[pixelInfo]) / CGFloat(255.0)
let g = CGFloat(data[pixelInfo+1]) / CGFloat(255.0)
let b = CGFloat(data[pixelInfo+2]) / CGFloat(255.0)
let a = CGFloat(data[pixelInfo+3]) / CGFloat(255.0)
return UIColor(red: r, green: g, blue: b, alpha: a)
【讨论】:
以上是关于如何获取 UIImage 中像素的颜色?的主要内容,如果未能解决你的问题,请参考以下文章