是否可以使PC的网络摄像头充当环境光传感器? 我在Windows 8专业版中使用.Net 4.5框架。
答案 0 :(得分:2)
Philippe对这个问题的回答:How to calculate the average rgb color values of a bitmap有代码可以计算bitmat图像的平均RGB值(代码中为bm):
BitmapData srcData = bm.LockBits(
new Rectangle(0, 0, bm.Width, bm.Height),
ImageLockMode.ReadOnly,
PixelFormat.Format32bppArgb);
int stride = srcData.Stride;
IntPtr Scan0 = dstData.Scan0;
long[] totals = new long[] {0,0,0};
int width = bm.Width;
int height = bm.Height;
unsafe
{
byte* p = (byte*) (void*) Scan0;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
for (int color = 0; color < 3; color++)
{
int idx = (y*stride) + x*4 + color;
totals[color] += p[idx];
}
}
}
}
int avgR = totals[0] / (width*height);
int avgG = totals[1] / (width*height);
int avgB = totals[2] / (width*height);
获得平均RGB值后,您可以使用Color.GetBrightness来确定它的亮度或暗度。 GetBrightness将返回0到1之间的数字,0表示黑色,1表示白色。你可以使用这样的东西:
Color imageColor = Color.FromARGB(avgR, avgG, avgB);
double brightness = imageColor.GetBrightness();
您还可以将RGB值转换为HSL并查看“L”,这可能更准确,我不知道。