iOS - 检测像素的颜色?

Wil*_*sch 16 screen pixel colors ios

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

编辑 - 我现在不担心视网膜显示问题.

Joh*_*ker 9

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

  1. 使用UIGraphicsBeginImageContextWithOptions抓取屏幕(参见Apple Q&A QA1703 - " UIKit应用程序中的屏幕捕获 ").

  2. 然后使用CGImageCreateWithImageInRect来获取所需结果图像的一部分.

  3. 最后分析得到的图像.此时它变得复杂,但幸运的是,现有的问题应该向您展示:如何获取iphone上图像上像素的RGB值

另外,还有以下博客文章附带代码:什么颜色是我的像素?iPhone上基于图像的颜色选择器


Jon*_*own 5

这是怎么做的

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);
Run Code Online (Sandbox Code Playgroud)