Convertir de código HEX color a RGB en c puro utilizando C biblioteca solamente (sin C++, plantillas, etc.) RGB struct puede ser así -> typedef struct RGB {double r; doble g; doble b; } RGB1; función debe devolver RGB1Convertir de HEX color a estructura RGB en C
Respuesta
Un valor RGB se puede almacenar como en número entero a través de 0xRRGGBB. Ejemplos:
- rojas: 0xff0000
- verde: 0x00FF00
- Azul: 0x0000FF
00 es hexagonal para decimal 0, mientras que ff es 255. 0 corresponde a 0,0 y 255 a 1,0. (En realidad no especificó cuál es el rango. Supongo que es 0.0 a 1.0.)
Por lo tanto, con las suposiciones anteriores, necesita extraer cada componente y dividir por 255. Dado que suena como una tarea pregunta, le mostraré cómo puede hacer el componente rojo.
int hex = 0x123456;
c.r = ((hex >> 16) & 0xff)/255.0;
Cada dígito hexadecimal ocupa 4 bits. Así que cambie a la derecha en 16 bits (para mover todo 4 dígitos a la derecha) para hacer que 0xRRGGBB
se convierta en 0xRR
. Ahora tienes el componente rojo. (En caso de que haya datos más arriba en el entero, puede deshacerse de él enmascarando los datos a través del & 0xff
.)
Si está tratando con una cadena "#FFFFFF"
, primero debe convertirla a un número entero para que lo anterior funcione.
Suponiendo que el valor hexadecimal es un tipo de 32 bits 'int', y que usamos la estructura RGB descrito anteriormente, entonces tal vez hacer algo como:
struct RGB colorConverter(int hexValue)
{
struct RGB rgbColor;
rgbColor.r = ((hexValue >> 16) & 0xFF)/255.0; // Extract the RR byte
rgbColor.g = ((hexValue >> 8) & 0xFF)/255.0; // Extract the GG byte
rgbColor.b = ((hexValue) & 0xFF)/255.0; // Extract the BB byte
return rgbColor;
}
Una especie de estafa de la respuesta que dio @konforce, ¿no es así? – ubiquibacon
Nah. También había un código para el procesamiento de cadenas, pero el punto que Konforce hizo acerca de que probablemente era una pregunta de tarea era bueno. Por lo tanto, edité esta respuesta para que se pareciera más a la que se publicó anteriormente. – cubic1271
¿Debería hexValue ser del tipo unsigned int? Creo que el & 0xFF cancela el cambio aritmético, pero ¿un valor como 0xFFFFFF no causaría un desbordamiento cuando se transfiere? –
supongo RGB podría ser almacenada como 0xRRGGBB en algunos sistemas, pero en Windows se almacena como 0xBBGGRR (ver http://msdn.microsoft.com/en-us/library/windows/desktop/dd183449). Como el artículo menciona, hay macros GetRValue, GetGValue y GetBValue ya disponibles.
Si el código hexadecimal es una cadena, puede analizar como este
char *str = "0000FF";
int r, g, b;
sscanf(str, "%02x%02x%02x", &r, &g, &b);
Eso es enteros, no dobles. También verifique que sscanf
devuelve 3, la cantidad de elementos leídos.
¡Gran respuesta, simple y funcional! –
- 1. Cómo convertir Hex a RGB?
- 2. Cómo convertir códigos de color HEX RGB a UIColor?
- 3. Convertir System.Drawing.Color a RGB y Hex Value
- 4. ¿Convertir color RGB a CMYK?
- 5. Convertir RBG a HEX
- 6. Cómo convertir de hex a rgb usando Java?
- 7. convertir color html o rgb a system.drawing.brush
- 8. Obtener nombre de color por HEX o RGB
- 9. Convertir valores RGB al nombre de color
- 10. Convertir hex a flotante
- 11. Java: cómo convertir el color RGB a CIE Lab
- 12. C# Conversión delphi TColor al color (Hex)
- 13. Convertir un valor de color RGB en hexadecimal
- 14. Consola específica RGB Color de texto C++
- 15. Sass/Compass - Convierta Hex, RGB o color con nombre a RGBA
- 16. Cómo convertir HEX a NSString en Objective-C?
- 17. Asignando un entero a un color RGB en C#
- 18. Convertir RGB a ColorName Cadena Javascript
- 19. Convertir una cadena a HEX en SQL
- 20. color RGB a HSV en javascript?
- 21. ¿Existe un complemento de Vim para resaltar Hex, Rgb, Colors
- 22. ¿Cómo cambiar el color RGB a HSV?
- 23. Convertir valores RGB a Entero
- 24. Cómo convertir el "color de fondo" al formato rgb()?
- 25. cómo convertir hexadecimal a RGB
- 26. Convertir cadena a Color en C#
- 27. Valor HEX en Objective-C
- 28. ¿Generar hex de color aleatorio en Objective-C?
- 29. Ascii/Hex convertir en bash
- 30. CSS - RGB o hexadecimal para el color
No estoy seguro de entender la pregunta. Creo que marcar cosas como código y/o insertar líneas nuevas en la pregunta en lugares estratégicos puede ser útil para hacer que la pregunta sea más fácil para que las personas lean (y, por lo tanto, respondan). – cubic1271