我想知道位图是相当明亮还是黑暗。我意识到“相当明亮或黑暗”并不是一个非常精确的定义,但我只想提出一些非常简单的东西。
我的想法是将位图转换为单色位图,然后将白色像素的数量与黑色像素的数量进行比较。
这是我的C#代码:
private bool IsDark(Bitmap bitmap)
{
if (bitmap == null)
return true;
var countWhite = 0;
var countBlack = 0;
// Convert bitmap to black and white (monchrome)
var bwBitmap = bitmap.Clone(new Rectangle(0, 0, bitmap.Width, bitmap.Height), PixelFormat.Format1bppIndexed);
for (int x = 0; x < bwBitmap.Width - 1; x++)
{
for (int y = 0; y < bwBitmap.Height - 1; y++)
{
var color = bwBitmap.GetPixel(x, y);
if (color.A == 255)
countWhite++;
else
countBlack++;
}
}
return countBlack > countWhite;
}
我不明白:黑色像素的数量始终为0 - 无论我使用的是什么位图。
我错过了什么?
另外:我非常确定有更有效的方法可以解决这个问题。但此时我只想了解上述代码失败的原因......
谢谢你们! 英格玛
答案 0 :(得分:1)
首先,你可以试试这样的事情:
if (color.R == 0 && color.G == 0 && color.B == 0)
{
// black
countBlack++;
}
else if (color.R == 255 && color.G == 255 && color.B == 255)
{
// white
countWhite++;
}
else
{
// neither black or white
}
由于旁注GetPixel(x, y)
很慢,请查看Bitmap.LockBits。