我正在制作一个程序来生成一个位图,该位图首先生成一条蓝色的河流(Color.Blue)。现在测试程序是否可以实际检查相同的颜色,以便我可以替换它,我创建了一个用Color.Blue替换Color.Blue的函数。问题是,当我用河流生成Bitmap,然后尝试用其他颜色替换它时,它似乎无法识别蓝色,并且就此而言也要替换它。这是一个非常奇怪的错误,我似乎无法确切地知道出了什么问题。而且我很确定它会以正确的颜色生成河流。 这是我的颜色替换代码: "河"变量等于Color.Blue。
private void button2_Click(object sender, EventArgs e)
{
for (int x = 0; x < 20; x++) {
for (int y = 0; y < 20; y++) {
Color tempCol = city.GetPixel(x, y);
if (tempCol == river) {
city.SetPixel(x, y, Color.Yellow);
}
}
}
pictureBox1.Image = city;
MessageBox.Show("Done");
}
答案 0 :(得分:4)
问题在于你如何比较颜色。如果你看documentation,就会说:
此结构仅与其他Color结构进行比较。至 仅根据ARGB值比较颜色,你应该使用 ToArgb方法。这是因为Equals and Equality成员 使用不仅仅是ARGB值来确定等效性 颜色。
例如,不考虑黑色和 FromArgb(0,0,0) 相等,因为黑色是命名颜色而FromArgb(0,0,0)不是。
因此,更好的比较是:
if (tempCol.ToArgb() == river.ToArgb())
{
city.SetPixel(x, y, Color.Yellow);
}