简单的方法来读取iPhone上的PNG图像的像素颜色值?

有一个简单的方法来获得二维数组或类似的东西,代表图像的像素数据?

我有黑白PNG图像,我只是想读取某个坐标的颜色值。 例如20/100的颜色值。

UIImage上的这个类别可能是有用的Source

#import <CoreGraphics/CoreGraphics.h> #import "UIImage+ColorAtPixel.h" @implementation UIImage (ColorAtPixel) - (UIColor *)colorAtPixel:(CGPoint)point { // Cancel if point is outside image coordinates if (!CGRectContainsPoint(CGRectMake(0.0f, 0.0f, self.size.width, self.size.height), point)) { return nil; } // Create a 1x1 pixel byte array and bitmap context to draw the pixel into. // Reference: http://stackoverflow.com/questions/1042830/retrieving-a-pixel-alpha-value-for-a-uiimage NSInteger pointX = trunc(point.x); NSInteger pointY = trunc(point.y); CGImageRef cgImage = self.CGImage; NSUInteger width = CGImageGetWidth(cgImage); NSUInteger height = CGImageGetHeight(cgImage); CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); int bytesPerPixel = 4; int bytesPerRow = bytesPerPixel * 1; NSUInteger bitsPerComponent = 8; unsigned char pixelData[4] = { 0, 0, 0, 0 }; CGContextRef context = CGBitmapContextCreate(pixelData, 1, 1, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); CGColorSpaceRelease(colorSpace); CGContextSetBlendMode(context, kCGBlendModeCopy); // Draw the pixel we are interested in onto the bitmap context CGContextTranslateCTM(context, -pointX, -pointY); CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, (CGFloat)width, (CGFloat)height), cgImage); CGContextRelease(context); // Convert color values [0..255] to floats [0.0..1.0] CGFloat red = (CGFloat)pixelData[0] / 255.0f; CGFloat green = (CGFloat)pixelData[1] / 255.0f; CGFloat blue = (CGFloat)pixelData[2] / 255.0f; CGFloat alpha = (CGFloat)pixelData[3] / 255.0f; return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; } @end 

你可以把png放到一个图像视图中,然后使用这个方法从你要绘制图像的graphics上下文中获取像素值。

一个class级为你做,并解释了: http : //www.markj.net/iphone-uiimage-pixel-color/

直接的方法是稍微繁琐的,但是这里是:

  1. 获取CoreGraphics图像。

    CGImageRef cgImage = image.CGImage;

  2. 获取“数据提供者”,并从中获取数据。 NSData * d = [(id)CGDataProviderCopyData(CGImageGetDataProvider(cgImage)) autorelease];

  3. 找出数据的格式。

    CGImageGetBitmapInfo();

    CGImageGetBitsPerComponent();

    CGImageGetBitsPerPixel();

    CGImageGetBytesPerRow();

  4. 找出色彩空间(PNG支持灰度/ RGB /调色板)。

    CGImageGetColorSpace()

间接的方法是将图像绘制到上下文(请注意,如果需要任何保证,您可能需要指定上下文的字节顺序)并读取字节。
如果您只想要单个像素,则使用正确的矩形将图像绘制到1×1上下文可能会更快
(像(CGRect){{-x,-y},{imgWidth,imgHeight}} )。
这将为您处理色彩空间转换。 如果您只想要亮度值,请使用灰度上下文。