Использование ToArgb() с последующим FromArgb() не приводит к исходному цвету
Это не работает
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 ответа
Из документации MSDN поColor.operator ==
:
Этот метод сравнивает больше, чем значения ARGB структур Color. Это также делает сравнение некоторых государственных флагов. Если вы хотите сравнить только значения ARGB двух структур Color, сравните их с помощью метода ToArgb.
Я предполагаю, что государственные флаги разные.
Они не будут равны, так как Color.Blue не равен вашему цветному объекту, он равен чему-то, что хранится внутри, "new Color(KnownColor.Blue);" если быть точным.
Я ожидал бы этого с Assert.AreSame из-за бокса с типами значений, но у AreEqual не должно быть этой проблемы.
Не могли бы вы добавить, какой язык (я полагаю, C#) вы используете и какие рамки тестирования?
Что значит Assert.AreEqual(true, Color.Blue == fred);
результат в?
Кроме того, это также работает, и я думаю, что это более интуитивно
[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);
}