Last active
January 19, 2022 08:53
-
-
Save marchinram/3675efc96bf1cc2c02a5 to your computer and use it in GitHub Desktop.
iOS Swift UIImage subscript extension to get pixel color
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
} | |
} |
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 haven’t looked at this code in awhile but looks like it needs a guard statement, I can update a lil later today
…Sent from my iPhone
On Jul 3, 2019, at 08:10, Leroy ***@***.***> wrote:
Ive got these errors. whats wrong?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@herbgarlow sure, something like this:
Remember the subscript returns an optional incase you gave an out of bounds x or y value