Pregunta

System.Drawing.Color tiene un método ToArgb () para devolver la representación Int del color.
En Silverlight, yo creo que tenemos que utilizar System.Windows.Media.Color. Tiene A, R, G, B miembros, pero ningún método para volver un solo valor.
¿Cómo puedo aplicar ToArgb ()? En System.Drawing.Color, ToArgb () consta de

return (int) this.Value;  

System.Windows.Media.Color tiene un método FromArgb (byte A, byte R, byte G, byte B). ¿Cómo puedo descomponer el Int devuelto por ToArgb () para su uso con FromArgb ()?

Gracias por cualquier punteros ...

¿Fue útil?

Solución

corto y rápido. Sin una llamada a un método adicional, pero con operaciones rápidas.

// To integer
int iCol = (color.A << 24) | (color.R << 16) | (color.G << 8) | color.B;

// From integer
Color color = Color.FromArgb((byte)(iCol >> 24), 
                             (byte)(iCol >> 16), 
                             (byte)(iCol >> 8), 
                             (byte)(iCol));

Otros consejos

Parece que usted está haciendo dos preguntas aquí, me dejó tomar otra puñalada en ella. En cualquier caso, usted querrá mirar en el uso de la BitConverter clase.

esta página :

  

El byte-ordenamiento de la ARGB de 32 bits   valor es aarrggbb.

Por lo tanto, para implementar ToArgb(), se podría escribir un método de extensión que hace algo como esto:

public static int ToArgb(this System.Windows.Media.Color color)
{
   byte[] bytes = new byte[] { color.A, color.R, color.G, color.B };
   return BitConverter.ToInt32(bytes, 0);
}

Y a "descomponer el Int devuelto por ToArgb () para su uso con FromArgb ()", se puede hacer esto:

byte[] bytes = BitConverter.GetBytes(myColor.ToArgb());
byte aVal = bytes[0];
byte rVal = bytes[1];
byte gVal = bytes[2];
byte bVal = bytes[3];  

Color myNewColor = Color.FromArgb(aVal, rVal, gVal, bVal);

Espero que esto ayude.

Sólo una breve nota:

Recuperación de la representación entera de un objeto "color" parece ser 4 veces más rápido para mí al llamar color.ToArgb () directamente en lugar de utilizar los BitShift-operaciones en la respuesta marcada. Así que si usted tiene acceso a .ToArgb (), utilice siempre que!

El hilo creador declarado que no tiene acceso a ella, así que por supuesto la respuesta marcada sigue siendo correcta, juse no se deje confundir por los reclamados "operaciones rápidas" en el mismo.

Hemos de tener en cuenta:. El color de la instancia de color está internamente ya se guarda como valor int, por lo ToArgb () es simplemente devolverlo, al acceder a cada byte de que (por las propiedades .A, .R,. G., .B) y luego volver a conjuntarse por bitshifting se está moviendo un poco en un círculo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top