環境光センサーとして機能する PC の Web カメラを作成することは可能ですか? Windows 8 pro で .Net 4.5 フレームワークを使用しています。
質問する
2402 次
1 に答える
2
この質問に対する Philippe の回答:ビットマップの平均 RGB カラー値を計算する方法には、ビットマット イメージの平均 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」を見ることもできますが、それはより正確かもしれませんが、わかりません。
于 2012-09-02T19:22:46.233 に答える