【问题标题】:Replacing a color C#替换颜色 C#
【发布时间】:2013-05-27 17:35:40
【问题描述】:

我正在开发一个生成位图的程序,它首先生成一条蓝色的河流(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");
    }

【问题讨论】:

  • if (tempCol == river)这一行上命中断点。 tempCol.G、tempCol.B、tempCol.R、tempCol.A 的值是多少?

标签: c# colors


【解决方案1】:

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

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

例如,不考虑 BlackFromArgb(0,0,0) 相等,因为黑色是一种命名颜色,而 FromArgb(0,0,0) 不是。

因此,更好的比较是:

if (tempCol.ToArgb() == river.ToArgb()) 
{
     city.SetPixel(x, y, Color.Yellow);
}

【讨论】:

    猜你喜欢
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 2012-04-09
    • 2019-03-13
    • 1970-01-01
    • 2018-05-26
    相关资源
    最近更新 更多