Попробуйте это, где «self.m_imgvwSource» является uiview / uiimageview в соответствии с вашими потребностями

мер, предположим, что я хочу определить цвет пикселя с помощью экранных координат (100, 200). Есть ли способ сделать это?

РЕДАКТИРОВАТЬ - Я не беспокоюсь о проблемах отображения сетчатки на данный момент.

Ответы на вопрос(3)

где «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;
}
Решение Вопроса

Используйте UIGraphicsBeginImageContextWithOptions, чтобы захватить экран (см. Apple Q & A QA1703 - "Снимок экрана в приложениях UIKit«).

Тогда используйтеCGImageCreateWithImageInRect захватить часть результирующего изображения, которое вам требуется.

Наконец, проанализируйте полученное изображение. Это становится сложным в данный момент, но, к счастью, есть существующий вопрос, который должен показать вам путь:Как получить значения RGB для пикселя на изображении на iphone

Кроме того, есть следующая статья в блоге, которая сопровождается кодом:Какого цвета мой пиксель? Выбор цвета на iPhone

 simonthumper23 мар. 2013 г., 17:05
@WilliamJockusch Я реализовал это, однако я хочу регулярно определять цвет (всего 1 пиксель на экране) (каждые 0,04 секунды, используя таймер), создавая скриншот всего экрана, что приводит к отставанию моего приложения ... вы случайно не нашли более эффективный способ памяти? И извиняюсь за комментирование такой старой темы! ;)
 William Jockusch11 янв. 2011 г., 21:12
Некрасиво но должно работать
 John Parker23 мар. 2013 г., 18:16
@simonthumper К сожалению, нет. Если вам не нужно захватывать экран, вы можете сделать вещи быстрее. (Это действительно зависит от источника данных изображения.) Тем не менее, у меня возникнет соблазн создать новый вопрос (хотя упомяните, что вы прочитали / усвоили этот вопрос), если проблема, которую вы пытаетесь решить, достаточно разные.

Вот как это сделать

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);
 Hara Hara Mahadevaki18 нояб. 2016 г., 08:11
Как я могу получить цвет RGB UIview?
 c1pherB1t16 мая 2012 г., 17:22
Почему вы умножаете индекс на 4? Потому что это 4 байта на пиксель?
 Jonathan Brown17 мая 2012 г., 18:39
Ага! Красный Зеленый Синий Альфа

Ваш ответ на вопрос