This code snippett will allow you to extract the UIColor of a pixel in a UIImage at a given CGPoint. This is useful for apps that deal with pictures or colors.
First of all the code:
extension UIImage {
public 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)
}
}
As you can see this is an extension, which means that you can use the function at any instance of UIImage.
How to use the code snippet in a Playground
-
You need to import UIKit
import UIKit
-
Add an image to the Resourches folder
I have an image inside the Resources folder called app-icon.png
-
Create an instance of the UIImage class
let image = UIImage(named: "app-icon.png")
-
Create a point with the CGPoint class
let point = CGPoint(x: 768, y: 384)
-
Call the function on the instance
let color = image?.getPixelColor(pos: point)
This will return the R, G, B, and A values of the UIImage.
Full playground file:
import UIKit
extension UIImage {
public 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)
}
}
let image = UIImage(named: "app-icon.png")
let point = CGPoint(x: 768, y: 384)
let color = image?.getPixelColor(pos: point)
If you have any questions or taughts leave theme down below in the comment section.