4

I have the following swift code.

let resolution = [imageView.frame.size.width, imageView.frame.size.height]

for x in 0...Int(resolution[0]) {
    for y in 0...Int(resolution[1]) {
        let coordinate = [x, y]
        //Find the colour of the pixel here
    }
}

I want to be able to find the colour being displayed by each individual pixel in the photo. Is there a way to modify the code where I have put "//Find the colour of the pixel here" to get it to print the RGB value of the pixel at the coordinate represented by the constant coordinate?

Matt Spoon
  • 2,760
  • 5
  • 25
  • 41

2 Answers2

3

Adding to @Horray's answer, to get the color values you have to execute two more lines. Just check this implementation,

var pixel : [UInt8] = [0, 0, 0, 0]
var colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(CGImageAlphaInfo.PremultipliedLast.rawValue)
let context = CGBitmapContextCreate(UnsafeMutablePointer(pixel), 1, 1, 8, 4, colorSpace, bitmapInfo)

// Translate the context your required point(x,y)
CGContextTranslateCTM(context, -x, -y);
yourImageView.layer.renderInContext(context)

NSLog("pixel: %d %d %d %d", pixel[0], pixel[1], pixel[2], pixel[3]);

let redColor : Float = Float(pixel[0])/255.0
let greenColor : Float = Float(pixel[1])/255.0
let blueColor: Float = Float(pixel[2])/255.0
let colorAlpha: Float = Float(pixel[3])/255.0

// Create UIColor Object    
var color : UIColor! = UIColor(red: CGFloat(redColor), green: CGFloat(greenColor), blue: CGFloat(blueColor), alpha: CGFloat(colorAlpha))
ZYiOS
  • 5,204
  • 3
  • 39
  • 45
Anusha Kottiyal
  • 3,855
  • 3
  • 28
  • 45
2

You can try the following:

var pixel : [UInt8] = [0, 0, 0, 0]
var colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(CGImageAlphaInfo.PremultipliedLast.rawValue)
let context = CGBitmapContextCreate(UnsafeMutablePointer(pixel), 1, 1, 8, 4, colorSpace, bitmapInfo)

Hope this helps!!

Horray
  • 693
  • 10
  • 25