今天碰到一个这样的问题。我在修改以前用VB写的一个功能,这个功能中有一个部分是使用着色器给一段文字上色。然后这个颜色值存入数据库中的值是一个十进制数。新项目用C#,在Winform中需要读取这个数据给文字画上颜色。
通过上网找资料以及结合个人理解,该转换过程主要有以下几个步骤:
1、十进制数转成十六进制字符串。
2、十六进制字符串转成RGB码。
3、RGB码转成Color类型的值,给控件文字颜色属性赋值。
在研究这个功能实现的过程中需要先了解一些关键点。
首先,就是colorEdit等选颜色的控件都是通过设置RGB值来设置颜色的。而且R、G、B的范围都是0~255。转成十六进制就是0~FF。因此十六进制字符串为6位字符的字符串,范围为000000~FFFFFF。
其次,就是十进制转成十六进制字符串时,字符串的字符个数可能没有6位,这种情况需要在字符串前补0。如果超过6位,说明这个十进制不是用来转颜色码的。
最后,通过测试发现这个6位字符的十六进制字符串,前两个字符对应这RGB码的B位,中间两位对应G位,后面两位对应R位。
一、十进制转十六进制
/// <summary>
/// 十进制转换到十六进制
/// </summary>
/// <param name="strDecimal">十进制数的字符串</param>
/// <returns>十六进制字符串</returns>
public static string Decimal2Hexadecimal