今日はWindowsXPでの16ビット色を、手探りで調べてみた。
とても疲れたけど、きっと誰かの役に立つはず。(^o^)
というか16ビットの環境での、レイヤード透過色指定に使いたかった。
赤と青はそれぞれ32色(5ビット)
0, 8, 16, 24, 33, 41, 49, 57 66, 74, 82, 90, 99,107,115,123 132,140,148,156,165,176,181,189 198,206,214,222,231,239,247,255
緑は64色(6ビット)
0, 4, 8, 12, 16, 20, 24, 28 32, 36, 40, 44, 48, 52, 56, 60 65, 69, 73, 77, 81, 85, 89, 93 97,101,105,109,113,117,121,125 130,134,138,142,146,150,154,158 162,166,170,174,178,182,186,190 195,199,203,207,211,215,219,223 227,231,235,239,243,247,251,255
つまり緑の色の表現が、ほかの色に比べて多いことが分かった。
これ簡単に変換できる計算式ないかなー。
とりあえず、いつものHSPを使って、
単純に一番近い色を拾ってテーブル作る関数を作ってみた。
#deffunc setchromakeyinit local base_r_b,local base__g_,local buff
sdim chromakey_rb,256
sdim chromakey_g,256
dim base_r_b,32
base_r_b( 0) = 0, 8, 16, 24, 33, 41, 49, 57
base_r_b( 8) = 66, 74, 82, 90, 99,107,115,123
base_r_b(16) = 132,140,148,156,165,176,181,189
base_r_b(24) = 198,206,214,222,231,239,247,255
dim base__g_,64
base__g_( 0) = 0, 4, 8, 12, 16, 20, 24, 28
base__g_( 8) = 32, 36, 40, 44, 48, 52, 56, 60
base__g_(16) = 65, 69, 73, 77, 81, 85, 89, 93
base__g_(24) = 97,101,105,109,113,117,121,125
base__g_(32) = 130,134,138,142,146,150,154,158
base__g_(40) = 162,166,170,174,178,182,186,190
base__g_(48) = 195,199,203,207,211,215,219,223
base__g_(56) = 227,231,235,239,243,247,251,255
dim buff,4
repeat 256
buff(0) = cnt
buff(1) = 9
repeat length(base_r_b)
buff(2) = abs(base_r_b(cnt) - buff(0))
if(buff(2)<=buff(1)){
buff(1) = buff(2)
buff(3) = cnt
}
loop
poke chromakey_rb,cnt,base_r_b(buff(3))
buff(1) = 5
repeat length(base__g_)
buff(2) = abs(base__g_(cnt) - buff(0))
if(buff(2)<=buff(1)){
buff(1) = buff(2)
buff(3) = cnt
}
loop
poke chromakey_g,cnt,base__g_(buff(3))
loop
return


コメント