Windowsの画面の16ビット色表現の方法

プログラミング
スポンサーリンク

今日は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

コメント

タイトルとURLをコピーしました