> B&0x1F、G&0x2F、R&1F
ちょ・・・ったく、もう。

たとえば赤を例にとって
8びっと=0〜255
5びっと=0〜31

0〜255の値を取りうる数値を単純に31で頭打ちしちゃダメだろ。
R=R×32÷256
つまり0.125倍に圧縮しなきゃダメだろ。頭打ちじゃ無くて圧縮ね!
インチをミリにしたり、ポンドをグラムにしたりするのと考え方は同じだよ〜

緑は6びっとだから後は自分で考えろ。
あと、G&0x2F も間違ってる。もういっぺん2進数、16進数を最初から勉強しなおせ。
これじゃ自転車に乗れないのにバイクの免許を取ろうとしてるのと同じ。無謀だよ。