[英]How do I get the color of a pixel in a UIImage?
所以我正在嘗試制作一個程序,讓我在其中拍照並告訴用戶顏色是什么。 我在實現 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)
}
}
}
}
您需要獲取用戶觸摸的CGPoint
,然后使用getPixelColor(pos:)
來獲取顏色。
CGPoint
有兩種獲取方式
您可以使用任何方法來獲取位置touchesBegan(_:with:)、touchesMoved、touchesEnded
使用點擊手勢
這是獲取CGPoint
的 StackOverlow 代碼:如何從點擊的位置獲取 CGPoint?
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)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.