Den Bereich auf dem Bildschirm mit einer bestimmten Farbe belegen - iOS

Ich versuche, etwas Ähnliches zu tun, was in gefragt wirddiese FrageAber ich verstehe die Antwort auf diese Frage nicht wirklich und bin mir nicht sicher, ob es das ist, was ich brauche.

Was ich brauche, ist einfach, obwohl ich nicht sicher bin, ob es einfach ist. Ich möchte die Anzahl der Pixel auf dem Bildschirm berechnen, die eine bestimmte Farbe haben. Ich verstehe, dass jedes "Pixel", das wir sehen, tatsächlich eine Kombination von Pixeln verschiedener Farben ist, die beispielsweise grün erscheinen. Also was ich brauche ist dastatsächlich Farbe - die, die der Benutzer sieht.

Wenn ich zum Beispiel eine UIView erstellt habe, setzen Sie die Hintergrundfarbe auf[UIColor greenColor]Wenn Sie die Größe auf die Hälfte des Bildschirmbereichs einstellen (wir können davon ausgehen, dass die Statusleiste der Einfachheit halber ausgeblendet ist und wir uns auf einem iPhone befinden), würde ich erwarten, dass diese "magische Methode" 240 * 160 oder 38.400- ergibt. die Hälfte der Bildschirmfläche.

Ich erwarte nicht, dass jemand diese "magische Methode" schreibt, aber ich würde es gerne wissen

a) Wenn dies möglich ist

b) Wenn ja, wenn fast in Echtzeit

c) Wenn ja, wo soll ich anfangen? Ich habe gehört, dass dies mit OpenGL möglich ist, habe aber keine Erfahrung in diesem Bereich.

Hier ist meine Lösung, dank Radif Sharafullin:

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage