-
-
Save marchinram/3675efc96bf1cc2c02a5 to your computer and use it in GitHub Desktop.
import UIKit | |
extension UIImage { | |
subscript (x: Int, y: Int) -> UIColor? { | |
guard x >= 0 && x < Int(size.width) && y >= 0 && y < Int(size.height), | |
let cgImage = cgImage, | |
let provider = cgImage.dataProvider, | |
let providerData = provider.data, | |
let data = CFDataGetBytePtr(providerData) else { | |
return nil | |
} | |
let numberOfComponents = 4 | |
let pixelData = ((Int(size.width) * y) + x) * numberOfComponents | |
let r = CGFloat(data[pixelData]) / 255.0 | |
let g = CGFloat(data[pixelData + 1]) / 255.0 | |
let b = CGFloat(data[pixelData + 2]) / 255.0 | |
let a = CGFloat(data[pixelData + 3]) / 255.0 | |
return UIColor(red: r, green: g, blue: b, alpha: a) | |
} | |
} |
@herbgarlow sure, something like this:
let image = UIImage(named: "someimage")!
if let color = image[100, 100] {
var red: CGFloat = 0.0
var green: CGFloat = 0.0
var blue: CGFloat = 0.0
var alpha: CGFloat = 0.0
color.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
// Do something with the color
}
Remember the subscript returns an optional incase you gave an out of bounds x or y value
can this code show the color of the pixel of a image? For example, I have uiImage, and I would like to know the color of the pixel located in [100.100], how to operate?
This code won't work if image is stored in BGR format.
Why are you copying your data? You can get the byte pointer directly from the provider.
I want to extract RGB values for all pixels from a frame captured during ARSession. The CVPixelBufferFormat for that is of type kCVPixelFormatType_420YpCbCr8BiPlanarFullRange. Will this code work for this format type as well?
I am new to Swift, I am having a tough time trying to understand the format types and difference in manipulating them.
Doesn't work on black for some reason
Could you possibly provide an example of how to "call" this example to obtain the RGBA values? Please and thankyou. :-)