2012-02-09 1 views
1

Je sauve ma couleur en db en valeur int.System.Drawing.Color convertir FromArgb question

int icolor = System.Drawing.Color.Red.ToArgb(); 
//result: -65536 

Quand convertir int en couleur que Color.Name de biens perdus. Doit retourner "Red" mais la propriété retourne "ff000000". Qu'est-ce que je fais Wrang?

J'ai besoin obtenir celui-ci - Propriété Rouge, mais pas de valeur hexadécimale

+1

Il y a 4 milliards de couleurs possibles qui peuvent être retournées par 'FromArgb'. Pourquoi ce chemin de code devrait-il être ralenti en essayant de déterminer si, parmi toutes les possibilités, vous avez effectivement sélectionné l'une des couleurs nommées, puis renvoyé celle-là spécialement? Pourquoi avez-vous besoin d'être rouge? –

+0

duplication possible de [Using ToArgb() suivi de FromArgb() ne résulte pas dans la couleur d'origine] (http://stackoverflow.com/questions/721324/using-toargb-followed-by-fromargb-does-not-result -dans-la-couleur-originale) –

Répondre

6

Essayez cette

System.Drawing.ColorTranslator.FromHtml("#" + "Hex value").Name 
+1

cela fonctionne ... merci u) – user571874

3

Tu fais rien de mal.

ff en hexadécimal est égal à 255, qui est la valeur décimale pour la couleur Red, qui est retourné par System.Drawing.Color.Red.ToArgb();

Si vous souhaitez obtenir le nom de la couleur, utilisez System.Drawing.Color.Red.Name

string sRedColorName = System.Drawing.Color.Red.Name; 
+0

ok. Comment puis-je obtenir la propriété Nom "Rouge"? – user571874

+0

@ user571874 Comme indiqué dans la réponse, vous pouvez utiliser 'System.Drawing.Color.Red.Name' – Shai

2

Lorsque convertir int en couleur que la propriété perdue Color.Name.

Oui, c'est correct. C'est ainsi que fonctionne la propriété Color.Name. Selon the documentation:

Cette méthode renvoie soit le nom défini par l'utilisateur de la couleur, si la couleur a été créée à partir d'un nom, ou le nom de la couleur connue. Pour les couleurs personnalisées, la valeur RVB est renvoyée.

Donc, puisque vous créez un objet Color de l'entier (RVB) valeur pas son nom, la structure Color ne reconnaît pas comme une couleur nommée. Ces informations ne sont pas déterminées dynamiquement à l'exécution en itérant sur une carte contenant toutes les couleurs connues et leurs valeurs RVB, mais stockées dans des champs sentinelles privés au moment de la création de l'objet Color. Vous perdez cette information dans le processus de sérialisation des informations de couleur dans votre base de données sous forme d'entier.

0

Vous mélangé des couleurs connues et à quelques couleurs. Lorsque vous convertissez une couleur connue en int et la convertissez en couleur, vous perdez le nom. Vous devez faire ceci:

int icolor = System.Drawing.Color.Red.ToArgb(); 

Color knownColor = System.Drawing.Color.FromArgb(icolor).ToKnownColor(); 
Questions connexes