//this would be initialized somewhere else, I assumestring hex ="#00E4FF";//strip out any # if they exist
hex = hex.Replace("#",string.Empty);byte r =(byte)(Convert.ToUInt32(hex.Substring(0,2),16));byte g =(byte)(Convert.ToUInt32(hex.Substring(2,2),16));byte b =(byte)(Convert.ToUInt32(hex.Substring(4,2),16));SolidColorBrush myBrush =newSolidColorBrush(Color.FromArgb(255, r, g, b));
Basé sur la façon dont MSDN définit la couleur de la structure, la couleur est également #FFF ainsi que #FFFF ainsi que #FFFFFF ainsi que #00FFFFFF. Dans les deux cas, vous pariez que la chaîne hexadécimale est de six caractères. Eh bien, c'est ce que la question posée. Si j'ai écrit un exemple pour chaque permutation de couleur, ou peut-on juste se mettre d'accord pour permettre à l'auteur de la question d'un peu de liberté pour l'utilisation que de la matière grise? Techniquement, vous avez absolument raison. La matière grise doit... être utilisé de façon appropriée. C'est mon avis, cependant, qu'il est de notre responsabilité, en tant que développeurs d'écrire robuste, évolutive code; nous devrions nous efforcer d'écrire faiblement couplé modules/code qui peut faire le travail d'une manière qui permet pour la maintenabilité et la réutilisabilité. Je suis totalement d'accord. C'est pourquoi l'OP devrait écrire robuste, évolutive code. C'est tout simplement une réponse technique, et non pas une robuste et évolutive de la solution. L'OP a été coincé voulant savoir un concept, de sorte que ces réponses ont aidé. Évidemment, on pourrait fouiller StackOverflow et de trouver des cas où nous pouvons améliorer les exemples de code et de les rendre plus réutilisable, mais c'est un peu présomptueux que je devrais construire un module sans rien savoir de ce que l'OP veut. Simple est souvent le plus efficace dans ce contexte, sinon l'autre solution est perdu dans le bruit.
Version améliorée (pour tous les formats de couleurs);
J'ai besoin d'un de ces qui fonctionne aussi avec les 3 chiffres "Raccourci forme hexadécimale" et le MME canal alpha versions (pour Silverlight/WPF), donc est venu avec cette version à couvrir tous les numérique formats de couleurs:
///<summary>///Convert a Hex color string to a Color object///</summary>///<param name="htmlColor">Color string in #rgb, #argb, #rrggbb or #aarrggbb format</param>///<returns>A color object</returns>publicstaticColorColorFromString(string htmlColor){
htmlColor = htmlColor.Replace("#","");byte a =0xff, r =0, g =0, b =0;switch(htmlColor.Length){case3:
r =byte.Parse(htmlColor.Substring(0,1),System.Globalization.NumberStyles.HexNumber);
g =byte.Parse(htmlColor.Substring(1,1),System.Globalization.NumberStyles.HexNumber);
b =byte.Parse(htmlColor.Substring(2,1),System.Globalization.NumberStyles.HexNumber);break;case4:
a =byte.Parse(htmlColor.Substring(0,1),System.Globalization.NumberStyles.HexNumber);
r =byte.Parse(htmlColor.Substring(1,1),System.Globalization.NumberStyles.HexNumber);
g =byte.Parse(htmlColor.Substring(2,1),System.Globalization.NumberStyles.HexNumber);
b =byte.Parse(htmlColor.Substring(3,1),System.Globalization.NumberStyles.HexNumber);break;case6:
r =byte.Parse(htmlColor.Substring(0,2),System.Globalization.NumberStyles.HexNumber);
g =byte.Parse(htmlColor.Substring(2,2),System.Globalization.NumberStyles.HexNumber);
b =byte.Parse(htmlColor.Substring(4,2),System.Globalization.NumberStyles.HexNumber);break;case8:
a =byte.Parse(htmlColor.Substring(0,2),System.Globalization.NumberStyles.HexNumber);
r =byte.Parse(htmlColor.Substring(2,2),System.Globalization.NumberStyles.HexNumber);
g =byte.Parse(htmlColor.Substring(4,2),System.Globalization.NumberStyles.HexNumber);
b =byte.Parse(htmlColor.Substring(6,2),System.Globalization.NumberStyles.HexNumber);break;}returnColor.FromArgb(a, r, g, b);}
À l'aide d'un octet.Analyser est plus efficace que de Convertir et ne nécessite pas de casting.
Mise à jour:
Fixe sous-chaîne de compensations pour l'espèce 8.
Merci pour la comptabilité de toutes les variations de la couleur de la structure. C'est probablement la façon la couleur interne convertisseur fonctionne aussi bien. De quoi ai vu c'est la réponse la plus complète à ce jour. Hughes: Merci pour la correction. Couper/coller causes 99% de mes bugs de nos jours 🙂
Cela ressemble copié à partir de weblogs.asp.net/lduveau/archive/2009/04/22/... et elle lève une exception si elle est utilisée avec la valeur indiquée dans la question. Même commentaire que précédemment. Parier sur un 8 chaîne de caractères, lorsque le code de couleur peut être moins que cela, tout le chemin jusqu'à 3.
Eh bien, c'est ce que la question posée. Si j'ai écrit un exemple pour chaque permutation de couleur, ou peut-on juste se mettre d'accord pour permettre à l'auteur de la question d'un peu de liberté pour l'utilisation que de la matière grise?
Techniquement, vous avez absolument raison. La matière grise doit... être utilisé de façon appropriée. C'est mon avis, cependant, qu'il est de notre responsabilité, en tant que développeurs d'écrire robuste, évolutive code; nous devrions nous efforcer d'écrire faiblement couplé modules/code qui peut faire le travail d'une manière qui permet pour la maintenabilité et la réutilisabilité.
Je suis totalement d'accord. C'est pourquoi l'OP devrait écrire robuste, évolutive code. C'est tout simplement une réponse technique, et non pas une robuste et évolutive de la solution. L'OP a été coincé voulant savoir un concept, de sorte que ces réponses ont aidé. Évidemment, on pourrait fouiller StackOverflow et de trouver des cas où nous pouvons améliorer les exemples de code et de les rendre plus réutilisable, mais c'est un peu présomptueux que je devrais construire un module sans rien savoir de ce que l'OP veut. Simple est souvent le plus efficace dans ce contexte, sinon l'autre solution est perdu dans le bruit.
OriginalL'auteur Jordan
Version améliorée (pour tous les formats de couleurs);
J'ai besoin d'un de ces qui fonctionne aussi avec les 3 chiffres "Raccourci forme hexadécimale" et le MME canal alpha versions (pour Silverlight/WPF), donc est venu avec cette version à couvrir tous les numérique formats de couleurs:
Pour une brosse à vous de l'utiliser comme ceci:
À l'aide d'un octet.Analyser est plus efficace que de Convertir et ne nécessite pas de casting.
Mise à jour:
Fixe sous-chaîne de compensations pour l'espèce 8.
Hughes: Merci pour la correction. Couper/coller causes 99% de mes bugs de nos jours 🙂
OriginalL'auteur Gone Coding
Espère que cette aide
Même commentaire que précédemment. Parier sur un 8 chaîne de caractères, lorsque le code de couleur peut être moins que cela, tout le chemin jusqu'à 3.
OriginalL'auteur Shanadas