ビバ!グラフィックス
この章でお待ちかね「画像ファイル」の読み書きについて説明します。

picload 画像ファイルパス, 読み込みモード
画像ファイルパス表示する画像ファイルを指定する。
読み込みモード読み込み時のウィンドウ初期化を制御する。
上記の構文で、FAQに挙げた拡張子の画像ファイルを読み込むことができます。 当然の事、幾ら拡張子がコチラの中であろうとも、実際の拡張子が別であればエラーとなります。 他の画像を読み込みたい場合は、他ユーザーが読み込めるように公開してくれたDLLの拡張命令を使ったり、 FAQの機能を使うことで読めるものなら、これらを利用する等で対応してください。 パラメータの説明を行います。 画像ファイルパスにはルートドライブ(ルートフォルダ)からの絶対パス、 またはカレントフォルダからの相対パスを指定します。 今回が初の外部ファイルを指定する命令の紹介ですので、上に書いたことの説明もします。 コンピュータ上のファイルは必ずどこかのフォルダに属しており(サブフォルダと呼ぶ)、 大元のフォルダ以外の全てのフォルダは直接もしくは間接的に必ず大元のフォルダに結び付けられます。 木の枝別れと似たイメージから上図の構造をツリー型構造と呼び、 一つに集約される大元(根幹)のフォルダのことを一般にルートフォルダと呼んでいます(図のAフォルダ)。 「gazou.bmp」という名の画像ファイルが図のFフォルダに入っている場合、 「A:\C\F\gazou.bmp」と記述する画像ファイルのパスを絶対パス、 現在開いている(カレントの)フォルダが図のDフォルダである場合に、 「..\F\gazou.bmp」と記述できるパスを相対パスと呼んでいます。 尚「..\」はカレントフォルダの1階層上フォルダを指しています。 エクスプローラにアドレスバーを表示させ、「..\」やら「..\..\」やらを入れてみてください。 現在開いていたフォルダを基準に別フォルダを開けることが確認できます。 パス指定する場合は、基本的に絶対・相対どちらのパスでも記述が可能となっており、 相対パスの基本となるカレントパスは、マクロとして定義されているdir_curを参照することで確認できます。
1
	mes "カレントディレクトリは「" + dir_cur + "」です。"
もう1つのパラメータの読み込みモードというのは、読込先ウィンドウについての制御フラグです。 0又は省略をすると、画像の大きさでHSPウィンドウを初期化します。 もしもディスプレイサイズよりも大きい画像ファイルを指定したとしても、 ウィンドウサイズは最大でディスプレイサイズまでしか広がりません。 また、スクロールバーが付いて全てを見れるようになっているわけでもありません。 逆に画像が小さすぎる場合、ウィンドウの表示がおかしくなってしまいます(FAQ参照)。 1(0以外の数値)を指定した場合はウィンドウが初期化されず、現在のウィンドウ内に表示します。 表示される位置はpos命令で指定できるカレントポジションを左上基点となります。 参考までに覚えておかなくて構いませんが、 HSP2ではpicload命令に第三・第四パラメータが存在し、そのパラメータで制御していましたが、 HSP3からはパラメータが2つ限定で、他の位置制御同様にpos命令で行うように変わりました。 画像がウィンドウ外にはみ出す位置であろうと、 完全なウィンドウ外であろうと切れたり見えなくなるだけでエラーにはなりません。 命令説明は以上です。 それでは、HSPウィンドウ内に画像を表示してみましょう。
1
	picload "sample\\demo\\bgsmoke.bmp" // カレントフォルダがHSPのインストール先である場合の相対パス
もしも、スクリプトエディタで設定できる「ツール(T)」-「オプション(O)」-「ディレクトリ」の 起動時のカレントディレクトリがマイドキュメント等のHSPディレクトリではない場合、 指定されたカレントフォルダ内にサンプルフォルダ、その中にdemoフォルダがあってbgsmoke.bmpがないと エラーとなって動作してくれないことでしょう。 その場合は、相対パスではなく、画像のある絶対パス指定で確認をしてください。 dir_exeマクロを使うことでHSPフォルダまでのディレクトリ名を自動で補完することもできます。 dir_exeマクロは、hsp.exeのあるフォルダを指してくれます(スクリプトで起動している場合)。 実行ファイルを作成して、EXEから実行させた場合、dir_exeは実行ファイルのフォルダパスとなります。
1
	pos 50, 50 : picload dir_exe + "/sample/demo/sky_bg.jpg", 1
画像を何度か読み込むと、そのうちに前回読み込んだ画像上に重ねられていきます。 読み込んでいくほどにたくさんの情報が入る形となり、重くなるのでは? というご意見を以前に掲示板で頂いたことがあります。 HSPウィンドウが階層構造となっており、 1つ前2つ前…の画像情報をどんどん保持してメモリを圧迫するイメージだったようですが 実際は、塗りつぶし・上書き更新処理となっています。 つまり、ウィンドウに展開したらそれっきりであり、 重なったところは塗りつぶした後の情報しか持っていません。 読み込むことでファイルサイズ分だけメモリがどんどん増えていく そのようなことはありませんので気にしなくて良いです。 さて、画像の読み込みは上記で説明したpicload命令で行えますが、 コレだけではアニメーションしようとするだけで大量の画像に分割する必要がありますし、 何より、背景上に重ねるキャラクターは四角形でなければ余白が見えて不細工です。 必要な部分だけの表示やエフェクトを中心としたアニメーションについては20章21章をご覧ください。 読み込みに対する、書き込みの命令紹介に移ります。 HSPウィンドウまたはバッファ内グラフィックス情報をBMP形式で保存する命令が用意されており、 以下のようにパラメータ部に書き出すファイルパスを指定するだけで作成することができます。
bmpsave 画像ファイルパス
画像ファイルパス書き出すBMPファイルパスを指定する。
指定するパスはpicload命令同様に、ドライブ名から指定していない場合は相対パスとして、 ドライブ名から指定した場合は絶対パスとして作成を行いますが、気をつける点を何点か。 拡張子(.bmp)も指定しなければエラーにはならないものの拡張子なし(不明ファイル)で作成される為、 エクスプローラ(フォルダ上のアイコン)から対応アプリケーションを指定せずには開けません。 ほかには、パスに存在しないフォルダ名を指定するとエラーになるので、 新しいフォルダ内に作成したい場合は、後の章で紹介するフォルダ作成命令を使用してください。 コレも当たり前といえばソレまでの話ですが、存在するフォルダに新しいBMP名を決める際、 そこにBMP名のフォルダが存在する場合はファイルを作成できません。 但し、拡張子も同じ同名ファイルが存在する場合、上書き保存してしまい元のファイルは消滅してしまいます。 拡張子を(.bmp)ではなく(.jpg)等の他の形式にして(.jpg)等が閲覧できるビューア等で開けたとしても、 ファイル自体は(.bmp)なので、「JPGで保存できた」と勘違いしないでください。
 1
 2
 3
 4
 5
 6
	picload "sample/demo/sky_bg.jpg"
	color 255, 255
	pos 10, 10 : mes "複写"
	bmpsave "sky_bg.bmp" // カレントフォルダに保存
	wait 200
	end