2009-04-06 12 views
5

Esto no funcionaToArgb() seguido de FromArgb() no resulta en el color original

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

¿Alguna sugerencia?

[Editar]

estoy usando NUnit y la salida es

fallidos:

esperado: color [Azul]

Pero fue: Color [A = 255, R = 0, G = 0, B = 255]

[Editar]

Esto funciona!

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

utilizando color = System.Drawing.Color; –

+0

P.S. el comentario anterior es solo humor acerca del color, no un intento de respuesta. –

Respuesta

10

Desde el MSDN documentation on Color.operator ==:

Este método compara más de los valores ARGB de las estructuras de color. También hace una comparación de algunos indicadores de estado . Si desea comparar solo los valores ARGB de dos estructuras de Color , compárelas usando el método ToArgb.

Supongo que las banderas de estado son diferentes.

+3

@lc: Los indicadores de estado son diferentes porque la propiedad azul estática devuelve un color con nombre, mientras que ToArgb no conserva el hecho de que el color tiene nombre, el int solo conserva la información ARGB. Al convertir de nuevo a un color, el nombre se pierde, de ahí la razón por la cual equal no devuelve verdadero. – casperOne

+0

@casperOne: Gracias por la explicación adicional. Pensé que tenía que ver con el nombre, pero para ser sincero, no estaba exactamente seguro. Esto lo aclara. –

+0

Gracias a ambos. –

0

lo que habría esperado esto con Assert.AreSame debido al boxeo con los tipos de valor, pero AreEqual no debería tener este problema.

¿Podría agregar qué lenguaje (supongo que C#) usa y qué marco de prueba?

¿Cómo resulta Assert.AreEqual(true, Color.Blue == fred);?

+0

Sí - que es C# Usando NUnit y la salida es: fallidos: esperado: color [Azul] Pero fue: Color [A = 255, R = 0, G = 0, B = 255] –

1

No serán iguales, ya que Color.Blue no es igual a su objeto de color, es igual a algo almacenado internamente, un "nuevo color (KnownColor.Blue);" para ser exacto.

0

Por otra parte, esto también funciona, y yo creo que es más intuitiva

[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); 
    } 
Cuestiones relacionadas