#import #import "UIImage+RGBAAtPixel.h" @implementation UIImage (RGBAAtPixel) - (BOOL)rgbaAtPixel:(CGPoint)point red:(CGFloat*)red green:(CGFloat*)green blue:(CGFloat*)blue { // Cancel if point is outside image coordinates if (!CGRectContainsPoint(CGRectMake(0.0f, 0.0f, self.size.width, self.size.height), point)) { return NO; } // 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 = point.x; NSInteger pointY = point.y; CGImageRef cgImage = self.CGImage; NSUInteger width = self.size.width; NSUInteger height = self.size.height; 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); CGContextTranslateCTM(context, -pointX, pointY-(CGFloat)height); CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, (CGFloat)width, (CGFloat)height), cgImage); CGContextRelease(context); *red = (CGFloat)pixelData[0]; *green = (CGFloat)pixelData[1]; *blue = (CGFloat)pixelData[2]; return YES; } @end