只要我理解VC ++中定义的COLORREF
是一个看起来像0x00bbggrr
的DWORD,其中bb, gg
和rr
是用于红色,绿色的字节和蓝色。 Microsoft的文档说明
高位字节必须为零。
然而,在.NET中,它用于存储颜色的alpha值。 我的问题是:
将我的alpha值存储在COLORREF的高字节中是危险的
答案 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无法匹配。我很好奇,用链接更新你的问题。