我正在尝试做类似于这个问题中所问的事情,但我并不真正理解该问题的答案,我不确定它是否是我需要的。
我需要的很简单,尽管我不太确定它是否容易。我想计算屏幕上某种颜色的像素数。我知道我们看到的每个“像素”实际上都是不同颜色的像素组合,例如绿色。所以我需要的是实际的颜色——用户看到的颜色。
例如,如果我创建了一个 UIView,将背景颜色设置为[UIColor greenColor]
,并将其尺寸设置为屏幕区域的一半(为了简单起见,我们可以假设状态栏是隐藏的,并且我们在 iPhone 上),我会期望这种“魔术方法”返回 240 * 160 或 38,400——屏幕面积的一半。
我不希望任何人写出这个“神奇的方法”,但我想知道
a) 如果可能的话
b) 如果是这样,如果它几乎是实时完成的
c) 如果又是这样,从哪里开始。我听说它可以用 OpenGL 完成,但我在这方面没有经验。
这是我的解决方案,感谢 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;
}