2010-06-04 112 views
0

我有一堆Color對象(.Net)。我想將它們轉換爲十六進制,這與像很簡單:十六進制到六角形速記

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

是否有.NET或通過正則表達式(或其他方式)的方式,我可以決定是否六角簡寫(如#F00)是否可用於指定Color,然後將其轉換爲?因此,對於可以使用十六進制速記的顏色,轉換爲該速度,否則,轉換爲十六進制對#FF0000

回答

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

這使用3個反向引用來檢查每個十六進制數字是否後跟一個副本。因此,#xxyyzz模式(可以轉換爲#xyz)的任何內容都匹配。

+0

感謝馬修。不幸的是,這隻能讓我使用'FF'和'00'工作。它不提供像Color.Olive這樣的顏色的匹配,它是'#808000',可以用十六進制速記寫成#880。 – 2010-06-05 00:11:44

+0

做了一些更多的研究,結果是速記只能用十六進制寫成。你的代碼很棒!我還發現如果顏色值字節可以除以17並返回一個整數(即它不是浮點數),那麼它可以寫成簡寫。不知道背後的數學,但它很酷。 – 2010-06-05 03:10:21

+0

17是0x11。所有具有加倍十六進制數字的字節都是其倍數。 – 2010-06-05 09:38:57

1

此鏈接描述了速記十六進制符號如何工作。

Shorthand Hex Notation

所以,從理論上講,這將允許你分析一個十六進制RGB值和檢測任何實現「雙複製」字符值應該能夠將其降低到一個十六進制速記。

乾杯