0

我正在开发一个生成位图的程序,它首先生成一条蓝色的河流(Color.Blue)。现在为了测试程序是否真的可以检查相同的颜色,以便我可以替换它,我创建了一个用 Color.Yellow 替换 Color.Blue 的函数。问题是当我用河流生成位图,然后尝试用其他颜色替换它时,它似乎无法识别蓝色,因此也替换它。这是一个非常奇怪的错误,我似乎无法确切地弄清楚出了什么问题。而且我很确定它会以正确的颜色生成河流。这是我的颜色替换代码:“河流”变量等于 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");
    }
4

1 回答 1

4

问题在于你如何比较颜色。如果您查看文档,它会说:

此结构仅与其他 Color 结构进行比较。要仅根据 ARGB 值比较颜色,您应该使用 ToArgb 方法。这是因为 Equals 和 Equality 成员不仅仅使用颜色的 ARGB 值来确定等效性。

例如,BlackFromArgb(0,0,0)被视为不相等,因为 Black 是一种命名颜色,而 FromArgb(0,0,0) 不是。

因此,更好的比较是:

if (tempCol.ToArgb() == river.ToArgb()) 
{
     city.SetPixel(x, y, Color.Yellow);
}
于 2013-05-27T18:57:54.470 回答