使用ToArgb()后跟FromArgb()不会产生原始颜色

时间:2009-04-06 12:58:34

标签: c# .net colors system.drawing.color

这不起作用

        int blueInt = Color.Blue.ToArgb();
        Color fred = Color.FromArgb(blueInt);
        Assert.AreEqual(Color.Blue,fred);

有什么建议吗?

[编辑]

我正在使用NUnit,输出是

失败:

预期:颜色[蓝色]

但是:颜色[A = 255,R = 0,G = 0,B = 255]

[编辑]

这有效!

        int blueInt = Color.Blue.ToArgb();
        Color fred = Color.FromArgb(blueInt);
        Assert.AreEqual(Color.Blue.ToArgb(),fred.ToArgb());

4 个答案:

答案 0 :(得分:10)

来自MSDN documentation on Color.operator ==

  

这种方法比较多   颜色结构的ARGB值。   它也做了一些比较   州旗。如果你想比较   只是两个颜色的ARGB值   结构,使用它们进行比较   ToArgb方法。

我猜测状态标志是不同的。

答案 1 :(得分:1)

它们不会相同,因为Color.Blue不等于你的颜色对象,它等于内部存储的东西,“new Color(KnownColor.Blue);”准确地说。

答案 2 :(得分:0)

我原以为Assert.AreSame是因为拳击与值类型,但AreEqual不应该有这个问题。

你可以添加哪种语言(我假设是C#)你的使用和哪种测试框架?

Assert.AreEqual(true, Color.Blue == fred);会产生什么结果?

答案 3 :(得分:0)

或者,这也有效,我认为它更直观

    [Test]
    public void ColorTransform()
    {
        var argbInt = Color.LightCyan.ToArgb();
        Color backColor = Color.FromArgb(argbInt);
        Assert.AreEqual(Color.LightCyan.A, backColor.A);
        Assert.AreEqual(Color.LightCyan.B, backColor.B);
        Assert.AreEqual(Color.LightCyan.G, backColor.G);
        Assert.AreEqual(Color.LightCyan.R, backColor.R);
    }