画像ファイルの読み込み&表示「picload命令」

HSP(HSP3)がサポートする画像ファイル GIF・JPEG・BMP ONION softwareさんが製作するWindows向けプログラミング言語『HSP』(Hot Soup Processor)は、スクリプト上で画像ファイル(イメージファイル)を利用することができます。

画像イメージを読み込んで、HSPのウィンドウ上に表示するためのHSP標準命令はpicload命令です。
 HSP3での画像ファイルの対応フォーマットは下のとおりです。(PNGファイルには対応してません。)

このpicload命令であれば、HSPのパックファイル機能(PACKFILE機能)も利用できます。つまり、画像ファイルを実行ファイル内に埋め込んでおけば、実行ファイル単体だけの配布というが可能です。

ちなみに、HSP製実行ファイルそのもののアイコン書き換え方法はこちらを参照。
 picload命令で画像ファイルが見つからない時に表示されるHSPエラー13の情報も。

仮想のバッファ画面を利用 (buffer命令)

このpicload命令・・・、HSP初心者さんがよくやってしまうのが、repeat命令やgoto命令のループ中に何度も同じ画像ファイルを読み込むようなムダな処理を書いてしまう例です。

まずは、下のソースコード(HSP3)です。
 見た目には何も変哲もなく画像は表示されてますが、無限ループになってるため何度も画像ファイルを読み込みにいってることになります。これはムダ以外の何者でもないばかりか、ハードディスクにアクセスしまくるため処理パフォーマンスは最悪! (*_*

//	ダメダメなソースコード

	color 255
	repeat
;		画像ファイルの読み込みと画像の表示
		pos 0, 0
		picload "sample\\demo\\jp6girl.bmp", 1

;		ループカウント値の表示
		pos 0, 0
		mes cnt

		wait 10
	loop

1つの画像ファイルに対するpicload命令は1度きり呼びます。
 基本的にスクリプトの最初あたりで、あらかじめ必要となる画像データを読み込んでおくわけです。(ゲームの場合だと、プログラムの規模にもよりますが)

この時に読み込んだ画像ファイルのイメージデータを格納しとくのがバッファ画面です。これは HSPのbuffer命令で用意できるもので、目には見えない仮想の画面(メモリ上の画面)になります。
 そして、これを必要な場面になったらgcopy命令(grotate命令、gsquare命令、gzoom命令)でメインのウィンドウ画面に 切り出してきます。

//	パフォーマンス的にもOKなソースコード

;	仮想のバッファ画面を用意
	buffer 1

;	仮想のバッファ画面に画像ファイルの読み込みと画像の表示
	picload "sample\\demo\\jp6girl.bmp"

;	メインのウィンドウを表示
	screen 0

	color 255
	repeat
;		仮想のバッファ画面から一部の画像データを切り出し
		pos 0, 0
		gcopy 1, 0, 0, 280, 480

		pos 0, 0
		mes cnt

		wait 10
	loop

gcopy命令で切り取りコピーしてきた画像データの表示位置を指定をするにはpos命令を利用します。(上と下をコンパイル実行して「hsp3.exe」のCPU使用率をそれぞれ比較してみてください。)

ちなみに、バッファ画面は用意すれば用意するだけメモリを消費します。
 複数の画像ファイルを1つのバッファ画面でやりくりするのと、1つの画像ファイルに対して1つのバッファ画面を用意 していくのとでは、メモリ消費量が違います。ここらへんはあまり敏感になることはないですが、ムダにバッファ画面を 乱立させないようにするといいでしょう。

画像ファイルの作成出力保存 (BMP・GIF・JPEG・PNG)

逆にHSPのウィンドウ上に表示されてるイメージを画像ファイルとして保存する方法ですが、HSP(HSP2&HSP3)が 標準でサポートしてるのは、ビットマップのBMPファイル(*.bmp)を出力できるbmpsave命令のみです。

GIFファイル、JPEGファイル、PNGファイルは画像データそのものを圧縮してるため、ファイルサイズが小さいんです。もし、仮に標準で画像ファイルの出力保存に対応するとなると、それぞれ圧縮アルゴリズムを組み込む必要がでてくるわけで、HSPが作成できるコンパイル済み実行ファイルのサイズに100%響くことになります。

HSPでは画像ファイルの作成出力保存が可能な拡張プラグインや汎用ライブラリを利用するのが一般的です。(→ 画像ファイルのHSP拡張プラグイン

画像ウィンドウ (画像の形状に合わせたウィンドウ)

音楽プレーヤーやディスクトップマスコットのように、タイトルバーや外枠がなく任意の画像の形状(スキン風)に 合わせたウィンドウを用意したい場合は、正方形サイズであれば普通にbgscr命令を使えます。だた、正方形でないものや 穴あきのような複雑な画像イメージを反映させたい場合は、HSPの標準命令だけではムリです。
 具体的には、Win32 API関数を駆使して「リージョン」(Yahoo!検索)という機能を利用します。

キーワード de HSP

HSPミニ講座

★ Yahoo!経由用ページ : ファイル | フォルダ | メニュー | マウス | ウィンドウ | オブジェクト | 文字列 | システム | 関数 | sendmsg命令 | その他 | サイトマップ | リンク