Converti da codice HEX a RGB in puro c utilizzando solo la libreria C (senza C++, modelli, ecc.) La struttura RGB può essere come questa -> typedef struct RGB {double r; doppio g; doppio b; } RGB1; La funzione deve restituire RGB1Converti da HEX a struct RGB in C
risposta
Un valore RGB può essere memorizzato come intero tramite 0xRRGGBB. Esempi:
- rossi: 0xff0000
- Verde: 0x00FF00
- Blu: 0x0000FF
00 è esadecimale per decimali 0, mentre FF è 255. 0 corrisponde a 0,0 e 255 a 1.0. (In realtà non hai specificato quale sia l'intervallo. Sto assumendo da 0.0 a 1.0)
Quindi, con le ipotesi sopra riportate, devi estrarre ogni componente e dividerlo per 255. Poiché suona molto come un compito domanda, ti mostrerò solo come puoi fare il componente rosso.
int hex = 0x123456;
c.r = ((hex >> 16) & 0xff)/255.0;
Ogni cifra esadecimale occupa 4 bit. Quindi spostare a destra di 16 bit (per spostare tutte le 4 cifre a destra) per rendere 0xRRGGBB
diventare 0xRR
. Ora hai il componente rosso. (Nel caso ci siano alcuni dati più in alto nel numero intero, puoi eliminarlo mascherando i dati tramite & 0xff
.)
Se hai a che fare con una stringa "#FFFFFF"
, devi prima convertirla a un numero intero per cui sopra funziona.
Supponendo che il valore esadecimale è un tipo a 32 bit 'int', e che noi utilizziamo lo struct RGB sopra descritto, allora forse fare qualcosa di simile:
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;
}
Tipo di strappare via la risposta che @konforce ha dato non siamo noi? – ubiquibacon
Nah. C'era anche del codice per l'elaborazione delle stringhe, ma il punto su cui konforce faceva questo probabilmente era una domanda a casa. Così, ho modificato questa risposta per essere più simile a quella pubblicata sopra. – cubic1271
Se hexValue deve essere di tipo unsigned int? Penso che il & 0xFF annulli lo spostamento aritmetico, ma un valore come 0xFFFFFF non causerebbe un overflow quando è passato? –
Credo RGB potrebbe essere archiviato come 0xRRGGBB su alcuni sistemi, ma in Windows è in realtà memorizzato come 0xBBGGRR (vedi http://msdn.microsoft.com/en-us/library/windows/desktop/dd183449). Come cita l'articolo, ci sono macro GetRValue, GetGValue e GetBValue già disponibili.
Se il codice esadecimale è una stringa, è possibile analizzare come questo
char *str = "0000FF";
int r, g, b;
sscanf(str, "%02x%02x%02x", &r, &g, &b);
Vale a int, non doppie. Controlla anche che sscanf
restituisca 3, il numero di elementi letti.
Ottima risposta, semplice e funzionante! –
- 1. Converti colonna HEX a dicembre in MySQL
- 2. Converti HEX a RGBA in Stylus
- 3. Come convertire hex in rgb usando Java?
- 4. Converti da stringa ASCII codificata in Hex in ASCII normale?
- 5. Converti coldfusion JSON a struct
- 6. Converti valore RGB in HSV
- 7. CSS - RGB o HEX per il colore
- 8. Converti file in stringa HEX Python
- 9. Converti struttura da C a Delphi
- 10. Converti System.Drawing.Color in RGB e valore esadecimale
- 11. Conversione da int RGB in esadecimale
- 12. Chrome DevTools converte tutti i colori HEX in RGB
- 13. Converti base64'd hash SHA1 a Hex hash
- 14. Conversione da Hex a Binary in bash
- 15. Converti valore di colore intero in RGB
- 16. Converti RGBA a RGB prendendo in considerazione sfondo
- 17. C++ Ottenere RGB da hBitmap
- 18. Converti valore colore RGB in RGBA a 0,75 alfa
- 19. Converti Oggetti .Net Color a codici HEX e Indietro
- 20. Converti valori RGB in nome colore
- 21. Converti Android camera2 api YUV_420_888 in RGB
- 22. Valore HEX in Objective-C
- 23. da RGB a HSV in OpenGL GLSL
- 24. da RGB a HSV in PHP
- 25. C++ Hex Parsing
- 26. dump hex galleggiante in C++
- 27. Converti la stringa di colore HEX in Colore?
- 28. Converti struct tm per time_t
- 29. C++: struct member in a switch statement
- 30. Hex in char array in C
Non sono sicuro di aver capito la domanda. Credo che contrassegnare le cose come codice e/o inserire nuove righe nella domanda in punti strategici possa essere utile per rendere la domanda più semplice da leggere (e quindi rispondere). – cubic1271