Get image raw data

  1. 5 months ago

    I want to get the color for a specific pixel in the image. Something good for games, or even check where in an image a person clicked.
    it's something like:

    func getPixelColor(pos: CGPoint) -> UIColor {
              let pixelData = CGDataProviderCopyData(CGImageGetDataProvider(self.CGImage))
              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)

    But i think CoreGraphics or CoreFoundation aren't ported. Is there another way?

  2. marco

    Mar 23 Administrator User since 2016

    Hi @Luiz D'Aniello you would need read access or read/write access to pixel information?

  3. I think write i could use BezierPath. What i need is check the color (rgba) of a point

  4. marco

    Mar 23 Administrator User since 2016

    The method you posted (as an example) would be very inefficient (it makes a full copy of the image buffer at each call). How you would expect the return values? An Int that represents RGBA with a mask? Or an array of values (probably inefficient), or what?

  5. It’s a function that I used on Swift and with Xojo. I know it’s very inefficient, but I don’t think there are one that I could get just a specific pixel.
    A return with the Int value of R,G,B and A.
    Because I can test for specific colors or Alpha channel.

  6. marco

    Mar 24 Administrator User since 2016

    Hi @Luiz D'Aniello I'd like to have a more complete solution, that's the reason why we are going to introduce a new ImageBuffer/ImageSurface object (not yet sure about the exposed name) where users can get/set individual pixel values. This object will also have a way to create an Image.

    Please note that nexts version will also have CIFilters support.

  7. Hi @marco. That would be really nice.
    A function that i could get/set pixel values are good to map images. Controlling the alpha channel or a secondary image with a map of colors, i could see in which part of image a person touched.
    Waiting for next versions. ;-)

  8. marco

    Apr 5 Administrator User since 2016

    @Luiz D'Aniello you can expect a lot of news next week :-)

  9. @marco can't wait to see it.

or Sign Up to reply!