2010-06-04 4 views
0

J'ai un tas de Color objets (.Net). Je veux les convertir en Hex, ce qui est assez simple avec quelque chose comme:Hex paire à raccourci hexagonal

Dim clr As Color = Color.FromArgb(255, 0, 0) 
Dim clrString = ColorTranslator.ToHtml(clr) 

Est-il possible en .Net ou par RegEx (ou d'une autre manière) que je peux déterminer si un raccourci Hex (comme #F00) est disponible pour le Color spécifié, puis le convertir en cela? Donc, pour les couleurs qui peuvent avoir un raccourci hexadécimal, convertir à cela, sinon, convertir en paire hexadécimale #FF0000.

Répondre

3
^#([0-9A-F])\1([0-9A-F])\2([0-9A-F])\3$ 

Ceci utilise 3 références arrières pour vérifier que chaque chiffre hexadécimal est suivi d'une copie. Donc tout ce qui a le motif #xxyyzz (qui peut être converti en #xyz) correspond.

+0

Merci Matthew. Malheureusement, cela ne m'empêche pas de travailler avec 'FF' et' 00'. Il ne fournit pas de correspondance pour une couleur comme Color.Olive, qui est '# 808000' et peut être écrite comme' # 880' dans le raccourci hexadécimal. –

+0

A fait plus de recherche, s'avère que sténographie peut seulement être écrit à partir de paires hexagonales. Votre code fonctionne très bien! J'ai également découvert que si l'octet de valeur de couleur peut être divisé par 17 et retourner un entier (c'est-à-dire que ce n'est pas un flottant), alors il peut être écrit en sténographie. Je ne connais pas les maths derrière ça, mais c'est cool. –

+0

17 est 0x11. Tous les octets avec des chiffres hexadécimaux doublés sont des multiples de cela. –

1

Ce lien décrit le fonctionnement de la notation hexagonale abrégée.

Shorthand Hex Notation

Ainsi, en théorie, toute mise en œuvre qui vous permettra d'analyser une valeur RGB Hex et détectez « double double » des valeurs de caractère devrait être en mesure de réduire à un maléfice sténographie.

Salutations