【问题标题】:How to translate legacy (OLE) colors to (A)RGB with .NET?如何使用 .NET 将旧版 (OLE) 颜色转换为 (A)RGB?
【发布时间】:2010-04-28 19:03:19
【问题描述】:

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

[INI_Section]
Color=-2147483633

做类似的事情:

Color.FromArgb(-2147483633)

提供了一个完全不是我期望的颜色的 alpha 混合版本。我认为像 -2147483633 这样的值应该代表系统定义或命名的颜色,如 ButtonFace。是否有正确翻译这些旧颜色的 .NET 方法?请注意,对 OlePro32.dll 的 pInvoke 不是一个选项。

【问题讨论】:

  • 您的号码以十六进制显示为FFFFFFFF8000000F(在 Windows 计算器上) - 您知道该数字(或者您拥有的任何数字)应该代表什么颜色吗?
  • @ChrisF:使用 DWord,而不是 QWord... 值是 8000000F,在 ARGB 中,它是一个部分透明的白色,只有一点蓝色。也许它实际上是 ARGB-1/10/11/10 或 RGBA(两者都是粉红色)
  • @BlueRaja - 我刚刚意识到这一点,但现在编辑我的评论为时已晚 :(

标签: c# .net vb.net ole colortransform


【解决方案1】:

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

【讨论】:

【解决方案2】:

如果由于某种原因您不能使用 System.Drawing 库(例如在 Azure 函数中),则可以这样计算:

                var ole = 6579300;
                var red = ole % 256;
                var green = (ole / 256) % 256;
                var blue = (ole / 65536) % 256;
                var backToOle = red + (green * 256) + (blue * 256 * 256);

【讨论】: