2010-06-04 79 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值和检测任何实现“双复制”字符值应该能够将其降低到一个十六进制速记。

干杯