Direct2D - D2D1::ColorFとRGBマクロ

公開:2010-11-21 09:15
更新:2020-02-15 04:36
カテゴリ:windows,direct2d,c++

Direct2DのD2D1::ColorFのコンストラクタは32ビットのRGB値も指定することができる。

ColorF(UINT32, FLOAT)( UINT32 rgb, FLOAT a = 1.0 );

上のように32bitのRGB値とアルファ値を別に指定する。RGB値は下記のビット構成になっている。

00000000rrrrrrrrggggggggbbbbbbbb

一方GDIのRGBマクロはR/G/Bそれぞれ8ビット数値を受け取り、32ビットのRGB値を返す。

#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
RGBマクロで指定した場合、RGB値は下記のビット構成になっている。

00000000bbbbbbbbggggggggrrrrrrrr

なのでRGBマクロで返される値をD2D1::ColorFコンストラクタの引数として渡しても、意図した色にならないので注意が必要だ。RとBを入れ替える必要がある。
でもこのD2D1::ColorFの引数って互換性維持のためにあるような気がするんだけどなんでこんなビット構成になっているんだろう。不思議だ。何か他の意図があるのだろうか。。