iOS – 检测像素的颜色?

例如,假设我想用屏幕坐标(100,200)检测像素的颜色。 有没有办法做到这一点?

编辑 – 我现在不担心视网膜显示问题。

这可能不是最直接的路线,但您可以:

  1. 使用UIGraphicsBeginImageContextWithOptions获取屏幕(请参阅Apple Q&A QA1703 – “ UIKit应用程序中的屏幕捕获 ”)。

  2. 然后使用CGImageCreateWithImageInRect来抓取你需要的结果部分。

  3. 最后分析得到的图像。 它在这一点变得复杂,但幸运的是有一个现有的问题,应该告诉你的方式: 如何获得在iPhone上的图像上的像素的RGB值

或者,有以下代码的博客文章: What Color是我的像素? 基于图像的颜色select器在iPhone上

这是如何做到这一点

CGContextRef ctx; CGImageRef imageRef = [image CGImage]; NSUInteger width = CGImageGetWidth(imageRef); NSUInteger height = CGImageGetHeight(imageRef); CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); unsigned char *rawData = malloc(height * width * 4); NSUInteger bytesPerPixel = 4; NSUInteger bytesPerRow = bytesPerPixel * width; NSUInteger bitsPerComponent = 8; CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); CGColorSpaceRelease(colorSpace); CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef); CGContextRelease(context); //GET PIXEL FROM POINT int index = 4*((width*round(yCoor))+round(xCoor)); int R = rawData[index]; int G = rawData[index+1]; int B = rawData[index+2]; NSLog(@"%d %d %d", R, G, B); //IF YOU WANT TO ALTER THE PIXELS int byteIndex = 0; for(int ii = 0 ; ii < width * height ; ++ii) { rawData[byteIndex] = (char)(newPixelValue); rawData[byteIndex+1] = (char)(newPixelValue); rawData[byteIndex+2] = (char)(newPixelValue); byteIndex += 4; } ctx = CGBitmapContextCreate(rawData, CGImageGetWidth( imageRef ), CGImageGetHeight( imageRef ), 8, CGImageGetBytesPerRow( imageRef ), CGImageGetColorSpace( imageRef ), kCGImageAlphaPremultipliedLast ); imageRef = CGBitmapContextCreateImage(ctx); UIImage* rawImage = [UIImage imageWithCGImage:imageRef]; CGContextRelease(ctx); image = rawImage; free(rawData); 

尝试这一个“self.m_imgvwSource”是根据您的需要uiview / uiimageview

 - (UIColor *) GetCurrentPixelColorAtPoint:(CGPoint)point { unsigned char pixel[4] = {0}; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef context = CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorSpace, kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedLast); CGContextTranslateCTM(context, -point.x, -point.y); [self.m_imgvwSource.layer renderInContext:context]; CGContextRelease(context); CGColorSpaceRelease(colorSpace); NSLog(@"pixel: %d %d %d %d", pixel[0], pixel[1], pixel[2], pixel[3]); UIColor *color = [UIColor colorWithRed:pixel[0]/255.0 green:pixel[1]/255.0 blue:pixel[2]/255.0 alpha:pixel[3]/255.0]; return color; }