DXライブラリで画像の使用色数を変更


DXライブラリでの画像加工その4。Fキーで画像の仕様色数を変更できるようにします。

所要時間は5分くらいです。

 

スポンサードリンク

前置き

DXライブラリを用いて画像加工ソフトを作成していきます。初期設定はこちらから、キー入力に関してはこちらからどうぞ。

今回の実行用素材は、下のフリーのものをお借りしました。パーッと遊びたくなりますよね。


*クリックで拡大

前回同様画像名はtest、サイズは 640×480 、形式は bmp です。

 

使用色数について

さて、まずは使用色数とは何ぞや、という話について。読んで字のまま、画面上に描写することができる色の数を指します。前回の描写方法は、DrawPixelのRGB値を0~255の間、合計256こからそれぞれ指定して色を作る、といったものでした。この場合の使用色数は、256の3乗で1700万弱となります。ちなみに、ファミコンの使用色数はわずか52色だったそうな。

今回、使用色数を減らす方法として『RGBの値の選択肢を減らす』という方法を取っていきます。例えば、0~255の間で1刻みで選択できたRGB値を、16刻みでしか取得出来なくする、という方法。選択可能なRGB値は、1色につき

0,16,32,48,64,…,208,224,240

の16種類となります。使用色数は16の3乗で4096色ですね。

 

スポンサードリンク

使用色数変更機能の追加

それでは早速、変更機能を作成していきます。Fキーを入力すると画像が4096色表記になる、という仕組みで行きましょう。

プログラムの仕組みとしては、RGBの値を16の倍数になるように切り捨てる、という方法で。ソースコードは、以下のものをメインループ下に貼り付ければOKであります。

//色数落とし
if(ky[KEY_INPUT_F]==1){
	for(int x=0;x<640;x++){
		for(int y=0;y<480;y++){
			for(int i=0;i<3;i++){
				Cr[x][y][i]+=8;
				Cr[x][y][i]=Cr[x][y][i]%16;
			}
		}
	}
}


*クリックで拡大

目に見えて色数が減りましたが、違和感がぱない。特に背景の緑はぐちゃぐちゃですね。なんでも、人間の目は緑色に敏感なんだとか。モノクロ処理のときも、緑の比率は矢鱈高かったですしね。

今度は緑だけ色数を倍にしてみます。総色数は、16×16×32で8192色です。ソースは下記のものに。

if(ky[KEY_INPUT_F]==1){
	for(int x=0;x<640;x++){
		for(int y=0;y<480;y++){
			for(int i=0;i<3;i++){
				if(i==1){
					Cr[x][y][i]+=4;
					Cr[x][y][i]-=Cr[x][y][i]%8;
				}
				else{
					Cr[x][y][i]+=8;
					Cr[x][y][i]-=Cr[x][y][i]%16;
			}
		}
	}
}


*クリックで拡大

先ほどより幾分かましに。このように緑の光だけ色数を増やすことはよくあるそうで、実際16ビットカラー32ビットカラーと呼ばれる表記法は緑の色数は赤や青の倍になっているのだとか


*クリックで拡大

色数を128色(赤青4色、緑8色)まで落とすとこんな絵に。色々いじると楽しいです。

スポンサードリンク