Получение области, занятой определенным цветом на экране - 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;
}