2009-08-25 14 views
8

Tengo un valor ARGB almacenado como un tipo int. Fue almacenado llamando a ToArgb.dividir ARGB en valores de bytes

Ahora quiero los valores de bytes de los canales de color individuales del valor int.

por ejemplo

int mycolor = -16744448; 
byte r,g,b,a; 

GetBytesFromColor(mycolor,out a, out r, out g, out b); 

¿Cómo le GetBytesFromColor poner en práctica?

Para dar el contexto, estoy pasando un valor de color persistente en db como int a una aplicación Silverlight que necesita los valores de bytes individuales para construir un objeto de color.

System.Windows.Media.Color.FromArgb(byte a, byte r, byte g, byte b) 

Respuesta

13

Usted está después de los 4 fragmentos sucesivos de 8 bits de un entero de 32 bits; por lo que una combinación de enmascaramiento y el cambio:

b = (byte)(myColor & 0xFF); 
g = (byte)((myColor >> 8) & 0xFF); 
r = (byte)((myColor >> 16) & 0xFF); 
a = (byte)((myColor >> 24) & 0xFF); 
+0

¿Cómo se invierte este proceso? – nebkat

+0

'mycolor = (a << 24) + (r << 16) + (g << 8) + b;' –

2
public void GetBytesFromColor(int color, out a, out r, out g, out b) 
{ 
    Color c = Color.FromArgb(color); 
    a = c.A; 
    r = c.R; 
    g = c.G; 
    b = c.B; 
} 
+1

-1. Silverlight no tiene esta sobrecarga de FromArgb. – AnthonyWJones

Cuestiones relacionadas