今日は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
コメント