Last Update : 2007/02/xx
画像ファイル(イメージファイル)を読み込んで、screen命令やbgscr命令のウィンドウ上、あるいはbuffer命令の仮想バッファ画面上に表示する命令です。命令名の由来は「picture load」から。
picload "画像ファイルパス", 読み込みモード
ハードディスク上の画像ファイルのパスを指定します。純粋なファイル名だけであれば、HSPのPACKFILE機能として実行ファイル内に埋め込んだ画像ファイルをそのまま直で読み込むこともできます。
第1パラメータの読み込みモードは、新規に初期化したウィンドウに表示する(モード0、デフォルト)、現在のウィンドウに貼り付け表示する(モード1)です。モード0の場合、表示ウィンドウは画像サイズに合わせたサイズへと変更されてます。モード1の場合、カレントポジションやpos命令が画像左上の表示位置として反映されます。
HSP3(HSP 3.x)のpicload命令で対応してる画像イメージフォーマットはこちらです。HSP2のpicload命令の対応フォーマットとは変わってます。MAGファイル、PNGファイルには対応してません!
| 対応フォーマット | 説明 |
| BMP (*.bmp) | Windowsビットマップファイル。通常の無圧縮の他に、RLE(ランレングス)圧縮されたBMP-RLE形式にも対応。 |
| GIF (*.gif) | GIFファイル。透過GIFにも対応。アニメーションGIFは1フレーム目のみ表示。 |
| JPEG (*.jpg;*.jpeg) | JPEGファイル。 |
| ICO (*.ico) | Windowsアイコンファイル。マルチアイコン形式は1番目のアイコン画像のみ表示。 |
| CUR (*.cur) | Windowsカーソルファイル。アニメーションカーソル(*.ani)は不可。 |
| WMF (*.wmf;*.emf) | Windowsメタファイル、拡張メタファイル。 |
◆ 画像ファイルの保存を行うには?
画像ファイルの読み込みの逆パターン、HSPのウィンドウ上に表示されたイメージを画像ファイルとして作成出力保存する。標準命令で対応しているのは、BMPファイル(*.bmp)の保存を行うbmpsave命令だけです。それ以外の画像形式で保存したいならば、HSP拡張プラグインや汎用ライブラリを利用するのが一般的です。(→
参照、HSP Tips集
画像ファイルの表示)
画像ファイルの表示するサンプル。モード1なので、ウィンドウのサイズは変わりません。pos命令が表示位置として反映されます。
button "画像", *load stop *load dialog "bmp;*.gif;*.jpg", 16, "画像ファイル" if stat = 0 : stop pos 50, 50 picload refstr, 1
■ picload命令を無駄に何度も呼ばない
picload命令はハードディスク上(or PACKFILE内)に画像ファイルを読みにいき、画像データを取得して、イメージをウィンドウ上に表示する、という複数の処理が内部で行われます。repeat命令やgoto命令のループ中で、同じ画像ファイルを何度もpicload命令してしまう処理はかなりムダです。また、画像ファイルがPACKFILE機能で暗号化されてる場合、当然ながら復号化分の処理も加わります。
最適な方法は、画像を1度きりのpicload命令で仮想のバッファ画面(bufffer命令)に表示させておき、必要なイメージはそのつどgcopy命令で切り出しコピーしてきます。(コピー処理は他に、拡大縮小コピーのgzoom命令、回転コピーのgrotate命令、方形コピーのgsquare命令も)
■ picload命令はなるべく起動直後に呼ぶ
これはあくまでゲームプログラミングの面で言えることですが、処理のど真ん中でpicload命令を使うのはパフォーマンスを落とす原因になります。プログラムを起動した直後に必要な画像ファイルはあらかじめpicload命令させておくのがポイントです。スピードを落としたくないところで、ハードディスク上の画像ファイルを読み込みにいってるような処理は避けましょう。
■ たくさんの画像ファイルをムダに用意しない
HSP(HSP3)付属のサンプルで使われる「sample\demo\efx.bmp」、「sample\game\bom.bmp」、「sample\game\shootchr.bmp」、「sample\game\testchr.bmp」をチェックしてみてください。複数の画像部品が1つの画像ファイル内に収めてあります。たとえば、これをバラバラにしてpicload命令で画像ファイルを5ファイル読み込むのと、1度のpicload命令と5回のgcopy命令ではパフォーマンスが異なります。