Convertir HEXADÉCIMAL de la couleur RVB struct en C
Convertir de la couleur HEX code RVB en pur c à l'aide de la bibliothèque C (sans C++,modèles, etc.) RVB struct peut-être comme ça -> typedef struct RGB{ double r; double g; double b; } RGB1;
la fonction doit retourner RGB1
Je ne suis pas sûr de comprendre la question. Je crois que le fait de signaler des choses en tant que code et / ou d'insérer des retours à la ligne en question dans des endroits stratégiques qui peuvent être utiles pour rendre la question plus facile pour les gens à lire (et donc de la réponse).
OriginalL'auteur Shavkat | 2010-09-16
Vous devez vous connecter pour publier un commentaire.
En supposant que votre valeur hexadécimale est un 32 bits int type, et que nous utilisons le RVB struct décrit ci-dessus, alors peut-être faire quelque chose comme:
Nah. Il y avait un code pour la chaîne de traitement trop, mais le point konforce faites à ce sujet étant probablement l'un des devoirs est une bonne question. Donc, j'ai édité cette réponse à celui kon posté ci-dessus.
Devrait hexValue être de type unsigned int? Je pense que le &0xFF annule le décalage, mais ne serait pas une valeur comme 0xFFFFFF provoquer un dépassement de capacité lorsqu'il est transmis?
'unsigned int" serait sans doute un peu plus agréable. Cela dit, dans ce cas, il n'a pas vraiment d'importance puisque RRVVBB s'adapte en 24 bits, et un " int " est de type (assez universellement) 32 bits de longueur. Cette réponse ne suppose que la RRVVBB bits sont stockés d'une certaine manière à l'int ... donc caveat emptor.
OriginalL'auteur cubic1271
Une valeur RVB peuvent être stockées sous forme de nombre entier via 0xRRGGBB. Exemples:
00 hex pour les décimales de 0, alors que ff est de 255. 0 correspond à 0.0 et 255 à 1.0. (En fait, vous n'avez pas à préciser ce que la gamme est. Je suis en supposant 0.0 à 1.0.)
Donc, avec les hypothèses ci-dessus, vous avez besoin d'extraire de chaque composant et de le diviser par 255. Car il sonne un peu comme des devoirs à faire à la question, je vais juste vous montrer comment vous pouvez en faire la composante rouge.
Chaque chiffre hexadécimal en prend 4 bits. Donc maj vers la droite en 16 bits (pour tout déplacer 4 chiffres à la droite) pour
0xRRGGBB
devenir0xRR
. Maintenant, vous avez la composante rouge. (Juste au cas où certaines données plus haut dans la entier, vous pouvez vous en débarrasser en masquant les données via& 0xff
.)Si vous avez affaire à une chaîne
"#FFFFFF"
, alors vous feriez tout d'abord le convertir en un nombre entier pour la ci-dessus pour travailler.OriginalL'auteur Matthew
Si le code hexadécimal est une chaîne de caractères, vous pouvez l'analyser comme ce
C'est-à-entiers, pas des doubles. Également vérifier que
sscanf
renvoie 3, le nombre d'articles à lire.OriginalL'auteur Tor Klingberg
Je suppose que RVB peut être stocké comme 0xRRGGBB sur certains systèmes, mais sous Windows, c'est stockée comme 0xBBGGRR (voir http://msdn.microsoft.com/en-us/library/windows/desktop/dd183449). Comme le mentionne l'article, il y a des macros GetRValue, GetGValue, et GetBValue déjà disponibles.
OriginalL'auteur Andrey Pirozhenko