带有alpha值的VC ++ COLORREF

时间:2016-03-12 09:10:59

标签: winapi visual-c++ colors mfc

只要我理解VC ++中定义的COLORREF是一个看起来像0x00bbggrr的DWORD,其中bb, ggrr是用于红色,绿色的字节和蓝色。 Microsoft的文档说明

  

高位字节必须为零。

然而,在.NET中,它用于存储颜色的alpha值。 我的问题是:

将我的alpha值存储在COLORREF的高字节中是危险的

1 个答案:

答案 0 :(得分:2)

  

然而,在.NET中,它用于存储颜色的alpha值

没有。 COLORREF是GDI的typedef,是图形的遗留API,可以追溯到Windows 3.0版。严格的24bpp api并不知道有关alpha的bean,当时没有硬件。调色板是时尚,他们没有使用alpha。非常不愉快的编程顺便说一下,我在RealizePalette()上失去了不少毛发。

.NET使用GDI +。首先在gdiplus.h SDK头中作为C ++ api公开,并在Win3之后发布约8年。追赶不断发展的硬件,它支持32bpp和alpha通道。它对颜色值Color type使用了非常不同的定义。这与COLORREF不仅仅是添加的alpha通道不兼容,它还以完全相反的方式存储颜色。格式为0xaarrggbb。可能是故意的,可以很容易地看到代码意外地错误地使用COLORREF:)

不确定您使用COLORREF的位置,Reference Source无法匹配。我很好奇,用链接更新你的问题。