作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想开发一个类似 featured here 的基本工具.我将截取一些网页的屏幕截图,然后我希望从中截取前五种最流行的颜色,然后以某种方式决定这些颜色是否匹配。
我想用 C# 编写这个工具,经过一番研究后我发现了锁位。我的第一个想法是拍摄一张图像,然后获取每个像素的颜色,但我不确定这是否会给我想要的结果以及如何列出六个最流行的颜色列表。
这里的任何人都可以就如何创建一个程序来执行与上述程序类似的操作提供建议,该程序将接收图像并选择图像中使用的前五种颜色吗?
最佳答案
好吧.. 使用缩略图(16x16、32x32 等)并从中选择颜色
更新代码:
private void button1_Click(object sender, EventArgs e)
{
int thumbSize = 32;
Dictionary<Color, int> colors = new Dictionary<Color, int>();
Bitmap thumbBmp =
new Bitmap(pictureBox1.BackgroundImage.GetThumbnailImage(
thumbSize, thumbSize, ThumbnailCallback, IntPtr.Zero));
//just for test
pictureBox2.Image = thumbBmp;
for (int i = 0; i < thumbSize; i++)
{
for (int j = 0; j < thumbSize; j++)
{
Color col = thumbBmp.GetPixel(i, j);
if (colors.ContainsKey(col))
colors[col]++;
else
colors.Add(col, 1);
}
}
List<KeyValuePair<Color, int>> keyValueList =
new List<KeyValuePair<Color, int>>(colors);
keyValueList.Sort(
delegate(KeyValuePair<Color, int> firstPair,
KeyValuePair<Color, int> nextPair)
{
return nextPair.Value.CompareTo(firstPair.Value);
});
string top10Colors = "";
for (int i = 0; i < 10; i++)
{
top10Colors += string.Format("\n {0}. {1} > {2}",
i, keyValueList[i].Key.ToString(), keyValueList[i].Value);
flowLayoutPanel1.Controls[i].BackColor = keyValueList[i].Key;
}
MessageBox.Show("Top 10 Colors: " + top10Colors);
}
public bool ThumbnailCallback() { return false; }
alt text http://lh3.ggpht.com/_1TPOP7DzY1E/S0uZ6GGD4oI/AAAAAAAAC5k/3Psp1cOCELY/s800/colors.png
关于c# - 从图像中获取配色方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2042789/
我是一名优秀的程序员,十分优秀!