Pobieranie obszaru zajmowanego przez określony kolor na ekranie - iOS

Próbuję zrobić coś podobnego do tego, o co pyta sięto pytanie, ale tak naprawdę nie rozumiem odpowiedzi udzielonej na to pytanie i nie jestem pewien, czy tego właśnie potrzebuję.

To, czego potrzebuję, jest proste, choć nie jestem pewien, czy to łatwe. Chcę obliczyć liczbę pikseli na ekranie, które są określonym kolorem. Rozumiem, że każdy „piksel”, który widzimy, jest w rzeczywistości kombinacją pikseli o różnych kolorach, które wydają się być, powiedzmy, zielone. Potrzebuję tegorzeczywisty kolor - ten, który widzi użytkownik.

Na przykład, jeśli utworzyłem UIView, ustaw kolor tła na[UIColor greenColor]i ustaw jego wymiary na połowę obszaru ekranu (możemy założyć, że pasek stanu jest ukryty dla uproszczenia i że jesteśmy na iPhonie), spodziewałbym się, że ta „magiczna metoda” zwróci 240 * 160 lub 38 400- połowa obszaru ekranu.

Nie oczekuję, aby ktokolwiek napisał tę „magiczną metodę”, ale chciałbym to wiedzieć

a) Jeśli to możliwe

b) Jeśli tak, jeśli zostanie to wykonane prawie w czasie rzeczywistym

c) Jeśli tak, to od czego zacząć. Słyszałem, że można to zrobić za pomocą OpenGL, ale nie mam doświadczenia w tej dziedzinie.

Oto moje rozwiązanie dzięki Radifowi Sharafullinowi:

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;
}

questionAnswers(2)

yourAnswerToTheQuestion