2011-05-25 24 views
13

Así que ahora tengo un número entre 0 y 2^24, y necesito asignarlo a tres valores RGB. Estoy teniendo problemas para lograr esto. Cualquier asistencia es apreciada.Asignando un entero a un color RGB en C#

+0

¿Es su número del formulario 0x00RRGGBB (hexadecimal)? –

Respuesta

16

Usted puede hacer

Color c = Color.FromArgb(someInt); 

y luego usar c.R, c.G y c.B para los valores de azul, respectivamente

+0

Ja, podría haber jurado que lo había intentado. Error humano, supongo. Gracias por su asistencia. –

13

dependiendo de qué color es el lugar donde, se puede usar el desplazamiento de bits para obtener el individual Rojo, Verde y colores como este:

int rgb = 0x010203; 
var color = Color.FromArgb((rgb >> 16) & 0xff, (rgb >> 8) & 0xff, (rgb >> 0) & 0xff); 

La expresión anterior se supone 0x00RRGGBB pero sus colores podrían ser 0x00BBGGRR en cuyo caso solo cambia los valores de 16, 8, 0.

Esto también usa System.Drawing.Color en lugar de System.Windows.Media.Color o su propia clase de color. Eso depende de la aplicación.

3

Puede utilizar la clase BitConverter para obtener los bytes desde el int:

byte[] values = BitConverter.GetBytes(number); 
if (!BitConverter.IsLittleEndian) Array.Reverse(values); 

La matriz tendrá cuatro bytes. Los primeros tres bytes contienen su número:

byte b = values[0]; 
byte g = values[1]; 
byte r = values[2]; 
2

El código anterior funciona con rejilla. solo una pequeña corrección, necesita cambiar byr como a continuación.

byte r = values[0]; 
byte g = values[1]; 
byte b = values[2]; 
+0

Sunil, esto debería haber sido un comentario sobre la publicación de Guffa, y no una respuesta a la pregunta original. Esto se debe principalmente a que su respuesta no responde en absoluto a la pregunta original. – Kevek

Cuestiones relacionadas