画面制御命令

HSP標準命令でもgcopy,gmode,line,boxf等の画面制御命令が存在しますよね。

hspext.DLLでは「画像の貼り付け・色指定」面での拡張が出来ます。

まず色指定から説明に入ります。

標準ではR(赤)G(緑)B(青)の3原色(RGB)を混ぜ合わせて様々な色を生成するcolorがありますね?

ココではH(色相)S(彩度)V(明度)のHSV形式を利用するhsvcolorがあります。

meslineなどcolorで変更できるものはすべてこの命令で変更可能です。

それぞれの値を何にすれば何色になるのか、初めての人にはRGBに比べ難しいかと思います。

HSV形式の利点は、中間色を活かした配色を考える時に便利だと言うことです。

簡単に書くと、現在の色より明るい色・暗い色・目立つ色・地味な色を簡単に作成できるということです。

色相は0〜191の範囲で0が赤、約64で緑、約128で青となります(191に近づくほど赤に戻っていく)。

本当は色相の単位が「°(度)」なので360が最大になるのですがHSPでは191です。

彩度は値が大きいほど色が鮮やかになり、小さいほど薄く(白っぽく)なっていきます。

単位は「%(パーセント)」なので100までのはずですがHSPでは255までです(ややこしいですね)。

明度は字の如く明るさを表していて値が大きいほどはっきりと色が確認でき、小さいほど黒くなります。

明度の単位も「%(パーセント)」なので100までのはずですがHSPでは255までです。

それでは原色(明度・彩度共に100%)だけを使った色相の変化のサンプルを書いておきます。

#include"hspext.as"
	screen 0,192,100
	repeat 192
		hsvcolor cnt,255,255 ; 色相だけ変化
		line cnt,-1,cnt,winy
	loop
	stop

アナタはRGBだけの変化(color)でこのように色を変化できますか?

colorで簡単にやるとすればifが必要になるでしょうし面倒だと思います。

hsvcolorはコレで終了して次にgf〜命令を説明します。

gf〜を使うには、まずgfiniで対象画面・サイズを指定しなければなりません。

またフルカラーウィンドウのみで使用してください。

パレットモードのウィンドウで次に説明するgfcopy等をするとエラーで落ちてしまいます。

gfinigfcopyに関する設定は形は少し違いますがgcopyと似ています。

p1のコピー元ウィンドウはgfiniを実行した時点での描画先ウィンドウ。

p2,p3のコピー開始(左上)座標は、次のgfcopyを実行した時点でのカレントポジション。

p4,p5のコピーサイズがgfiniのp1,p2を指します。

ただコレをやっただけではコピーされません。ただの設定だけですからね・・・。

実際にコピーするにはgfcopyを使います。

ココでの設定(パラメータ)はコピーレートのみです。gmodeのp4をやっているようなものです。

gfiniを除くgf〜命令の実行だけでは画面が更新されませんのでredrawを使って更新しなければなりません

パラメータはコピー率(0〜100%)を指定します。100で完全コピーとなります。

#include"hspext.as"
	buffer 2
	picload "sample\\demo\\hsp2ttl.jpg"
	wx=winx
	wy=winy
	gsel 0
	pos 0,100 : gfini wx,wy ; 貼り付け先ウィンドウID,座標とコピーサイズを決定する
	gsel 2
	pos 0,0 : gfcopy 50 ; コピー元ウィンドウID,座標とコピーレートを決定する
	gsel 0
	redraw
	stop

違うウィンドウの画像をコピーする場合gcopyより少し面倒に感じるのは私だけでしょうか?

続いてgfdecを使ってグレースケールのように白・黒と指定した色だけにしてしまおうというものです。

コレの対象範囲はgfiniのサイズとなります。

パラメータに指定する値は3つとも0〜255で値が大きくなるほどその色が抜けていきます。

すべての値が255になると、色が白ではなく黒となります。

ループでフェードアウト(ブラックアウト)効果を出すために一定の間隔で色を変化していく際に使用するときに

勘違いしやすいのがパラメータをシステム変数cntを使用して増やしていこうとすることです

cntで増やしていくと、2次関数の放物線のように暗くなるのが時間と共に早くなってきます。

gfdecはそれぞれの輝度をその値まで下げるのではなく、その値ずつ下げていくのです。

#include"hspext.as"
	picload "sample\\demo\\hsp2ttl.jpg"
	pos 100,50 : gfini 320,100
	repeat 256
		gfdec 1,5,5 ; 元の色→赤っぽく→黒にしていく (緑,青の輝度は255を超えるがエラーにはならない)
		redraw
		wait 1
	loop
	stop

gfincgfdecと(色が)逆で値が大きくなるほど白っぽくなり(ホワイトアウトし)ます。

サンプルも同じようなものなので書きません。

gfdecgfincに変えてみれば自分の目で確かめることが出来ます。

…とコレで拡張画面制御命令が終わってしまいました。

結構標準命令だけでいけるような気がしないでもありませんが利用してみてくださいね。