我想在 .NET 中检索背景图像中的主要颜色。可能吗?
最佳答案
您可以遍历图像中的所有像素并使用 getPixel 方法确定 RGB 值。然后你可以有一个字典来存储 ARGB 值和一个计数。然后,您可以查看图像中出现最多的 ARGB 值。
var list = new Dictionary<int, int>();
Bitmap myImage = (Bitmap)Bitmap.FromFile("C:/test.jpeg");
for (int x = 0; x < myImage.Width; x++)
{
for (int y = 0; y < myImage.Height; y++)
{
int rgb = myImage.GetPixel(x, y).ToArgb();
if (!list.ContainsKey(rgb))
list.Add(rgb, 1);
else
list[rgb]++;
}
}
正如所指出的,这对相似的颜色没有同情心。如果您想要一种更“一般”的多数颜色,您可以对相似性设置一个阈值。例如而不是:
if (!list.ContainsKey(rgb))
list.Add(rgb, 1);
else
list[rgb]++;
你可以这样做:
var added = false;
for (int i = 0; i < 10; i++)
{
if (list.ContainsKey(rgb+i))
{
list[rgb+i]++;
added = true;
break;
}
if (list.ContainsKey(rgb-i))
{
list[rgb-i]++;
added = true;
break;
}
}
if(!added)
list.Add(rgb, 1);
您可以将阈值 10 提高到您需要的任何值。
关于.net - 如何获得图像中的多数颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2545796/