Использование ToArgb () с последующим FromArgb () не приводит к исходному цвету - PullRequest
5 голосов
/ 06 апреля 2009

Это не работает

        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 ]

10 голосов
/ 06 апреля 2009

Из документации MSDN на Color.operator ==:

Этот метод сравнивает больше, чем ARGB-значения цветовых структур. Это также делает сравнение некоторых государственные флаги. Если вы хотите сравнить только значения ARGB двух цветов структуры, сравните их с помощью Метод ToArgb.

Полагаю, флаги состояния разные.

1 голос
/ 06 апреля 2009

Они не будут равны, так как Color.Blue не равен вашему цветному объекту, он равен чему-то, что хранится внутри, «new Color (KnownColor.Blue);» если быть точным.

0 голосов
/ 01 января 2010

Кроме того, это также работает, и я думаю, что это более интуитивно

    [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);
    }
0 голосов
/ 06 апреля 2009

Я бы ожидал этого с Assert.AreSame из-за бокса с типами значений, но у AreEqual не должно быть этой проблемы.

Не могли бы вы добавить, какой язык (я полагаю, C #) вы используете, и какой фреймворк для тестирования?

Что приводит к Assert.AreEqual(true, Color.Blue == fred);?

...