バッファーを利用した画像表示 『HSP3』
画像を表示するには「picload」命令を使いますが、ゲームなどでは同じ画像を複数利用することがあります。「picload」命令で何度も画像を読み込むのは処理的にすごく無駄です。そこでよく使われる方法が、バッファーという仮想の画面上で「picload」命令により画像を1回だけ読み込み、後はそのバッファーにある画像をコピーして表示させるという方法です。
仮想画面を指定するためには「buffer」命令を使います。
p1: ウィンドウIDを指定します。IDは0~31の範囲で指定します。
p2: 画面サイズのx幅を指定します。(横)
p3: 画面サイズのy幅を指定します。(縦)
p4: 画面モードを指定します。0 フルカラー 1 パレット(256色以下)
(例)
buffer 1 ; 仮想画面ID1に切り替える
picload "test.bmp" ; 仮想画面に画像「test.jpg」を読み込む
これで仮想画面ID1に画像が読み込まれました。
次はコピー先に画像をコピーして表示させます。
画像をコピーするには「gmode」命令で画像コピー設定を行い「gcopy」でコピーを実行します。
gmode p1,p2,p3
p1: コピーモードを指定します。
モード0: 通常モード。そのままコピーする最も標準的なモードです。
モード1: 画像バッファ間のメモリコピーを行います。
モード2: 透明色きコピーを行います。透明色になるのはRGBが0(黒)です。
モード3: 半透明合成コピーを行います。フルカラーのみ使用可能です。
モード4: 透明色付き半透明合成コピーを行います。
モード5: 色加算合成コピーを行います。
モード6: 色減算合成コピーを行います。
p2: コピーするx幅(横)
p3: コピーするy幅(縦)
モードの詳細設定は「hspwiki」を参考にしてください。
(例)
gmode 2, 100, 100 ;黒を透明化してサイズ100×100でコピー設定する。
p1: コピー元画面のウィンドウID
p2: コピー元画面のコピー開始位置(左上x座標)
p3: コピー元画面のコピー開始位置(左上y座標)
p4: コピーする範囲サイズ(横幅)
p5: コピーする範囲サイズ(縦幅)
(例)
gcopy 1, 0, 0
;ウィンドウID1の画面から(0.0)を左上として「gmode」の設定でコピーし表示する。
p4,p5を設定することにより、標準モードならば「gmode」なしでコピーできるようです。
「gmode」なしでさらに、p4,p5も設定しなければ、32×32のサイズでコピーするようです。
(32×32に縮小ではなくて、左上から32×32の部分のみをコピー)
【全体を通してのサンプル】
buffer 1 ; ①仮想画面 ウィンドウID1に切り替える
picload "test.jpg" ; ② 仮想画面に画像ファイル読み込み
screen 0 ; ③ ウィンドウID0の画面に切り替える(コピー先)
pos 10, 10 ; ④ カレントポジションを(10,10)にする
gmode 2, 50, 100 ; ⑤コピーモード設定する
gcopy 1, 0, 0 ; ⑥ 画像コピーを実行する
pos 70, 10 ; ⑦ カレントポジションを(70,10)にする
gcopy 1, 50, 0 ; ⑧ 画像コピーを実行する

仮想画面「ウィンドウID1」にサイズ100×100の「test.jpg」を読み込みます。
②で表示画面に切り替えてコピー処理を行います。
③④⑤で画像の左半分を表示しています。
座標(10,10)にポジションを移し、コピー元の左上(0,0)の位置から横幅50、縦幅100の領域をコピーする。
⑥⑦⑧で画像の右半分を表示しています。
座標(70,10)にポジションを移し、コピー元の左上(50,0)の位置から横幅50、縦幅100の領域をコピーする。


