DX9なら、全てのフォーマットを網羅しても大したことないし
俺は、フォーマットごとに型を作ったよ。

struct R8G8B8
{
enum
{
format = FMT_R8G8B8,
b_bits = 8,
g_bits = 8,
r_bits = 8,
};

union
{
struct
{
uint8_t b;
uint8_t g;
uint8_t r;
};
uint24_t value;
};

operator const uint24_t&() const { return value;}
operator uint24_t&() { return value; }
R8G8B8( const uint24_t& value_ ) : value(value_){}
R8G8B8(){}
};

これと、__if_exists()を組み合わせれば何でも出来る。