Получение области, занятой определенным цветом на экране - iOS

Я пытаюсь сделать что-то похожее на то, что спрашивают вэтот вопрос, но я действительно не понимаю ответ на этот вопрос, и я не уверен, что это то, что мне нужно.

Что мне нужно, так это просто, хотя я не уверен, что это легко. Я хочу рассчитать количество пикселей на экране определенного цвета. Я понимаю, что каждый "пиксель" мы видим, что на самом деле это комбинация пикселей разных цветов, которые кажутся, скажем, зелеными. Так что мне нужно, этоactual цвет - тот, который видит пользователь.

Например, если я создал UIView, установите цвет фона на[UIColor greenColor]и установите его размеры равными половине площади экрана (мы можем предположить, что строка состояния скрыта для простоты и что мы на iPhone), я бы ожидал, что это «магический метод» вернуть 240 * 160 или 38 400 - половину площади экрана.

Я не ожидаю, что кто-нибудь напишет этот «магический метод», но я хотел бы знать

а) если это возможно

б) Если это так, если это будет сделано почти в реальном времени

в) Если это так снова, с чего начать. Я слышал, что это можно сделать с помощью OpenGL, но у меня нет опыта в этой области.

Вот мое решение, благодаря Радифу Шарафуллину:

int pixelsFromImage(UIImage *inImage) {
    CGSize s = inImage.size;
    const int width = s.width;
    const int height = s.height;
    unsigned char* pixelData = malloc(width * height);

    int pixels = 0;

    CGContextRef context = CGBitmapContextCreate(pixelData,
                                                  width,            
                                                  height,            
                                                  8,           
                                                  width,            
                                                  NULL,            
                                                  kCGImageAlphaOnly);

    CGContextClearRect(context, CGRectMake(0, 0, width, height));

    CGContextDrawImage(context, CGRectMake(0, 0, width, height), inImage.CGImage );

    CGContextRelease(context);

    for(int idx = 0; idx < width * height; ++idx) {
        if(pixelData[idx]) {
            ++pixels;
        }
    }

    free(pixelData);

    return pixels;
}

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

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