如何使用.NET将遗留(OLE)颜色转换为(A)RGB?

问题描述:

我有一个编码为有符号整数(OLE,我认为)在传统INI文件中的颜色值列表,我需要使用.NET将它转换为(A)RGB值。一个INI例如:如何使用.NET将遗留(OLE)颜色转换为(A)RGB?

[INI_Section] 
Color=-2147483633 

做这样的事情:

Color.FromArgb(-2147483633) 

给出了一个颜色,是不是在所有我所期望的阿尔法混合版本。我认为像-2147483633这样的值应该表示一个系统定义的,或者像ButtonFace这样的命名颜色。有没有.NET方法来正确翻译这些传统颜色?请注意pEnvoke OlePro32.dll不是一个选项。

+1

你的号码在十六进制(在Windows计算器上)以'FFFFFFFF8000000F'出现 - 你知道什么颜色的数字(或实际上你有任何数字)应该代表? – ChrisF 2010-04-28 19:06:27

+0

@ChrisF:使用DWord,而不是QWord ...值是'8000000F',在ARGB中,它是一个部分透明的白色,只有一丝蓝色。也许它实际上是一个ARGB-1/10/11/10或RGBA(两者都是粉红色的) – 2010-04-28 19:11:06

+0

@BlueRaja - 我刚刚意识到这一点,但编辑我的评论为时已晚:( – ChrisF 2010-04-28 19:13:01

您可以使用ColorTranslator.FromOle进行转换。
http://msdn.microsoft.com/en-us/library/system.drawing.colortranslator.fromole.aspx

+1

完美。谢谢 – 2010-04-28 19:57:29

+3

+1。来自文档的更多内容“如果OLE_COLOR的高位被设置,则低位字节被视为系统颜色索引”http://support.microsoft.com/kb/131101因此,'8000000F'确实是*按钮面,因为系统颜色COLOR_BTNFACE在索引15处http://msdn.microsoft.com/en-us/library/ms724371(VS.85).aspx – MarkJ 2010-04-29 08:39:16