我想在.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的阈值提高到您需要的任何值.