Last Update : 2009/01/xx
HSPの画面を画像ファイルとして出力保存する命令です。命令名の由来はそのまま「bmp save」から。
保存対象となる画面は、HSPのscreen命令やbgscr命令で用意したウィンドウ画面のクライアントエリア部分、またはbuffer命令で用意した仮想バッファ画面だけです。HSPと無関係なウィンドウ画面は保存できません。保存形式は、無圧縮のWindowsビットマップファイル(*.bmp)になります。
bmpsave "ファイルパス・ファイル名"
パラメータは出力保存するファイル名やファイルパスを指定します。パスの区切り「\」は「\\」で表現することになるので注意してください。また、拡張子の「*.bmp」も指定する必要があります。すでに指定したファイルが存在する場合は、そのまま上書き保存されます。
なお、HSPのウィンドウに設置したボタン(button命令)、メッセージボックス(mesbox命令)、リストボックス(listbox命令)などのGUIオブジェクト、winobj命令やaxobj命令で用意したコントロールは、画像イメージとして保存されません。保存対象となるのは、mes命令、pset命令、line命令、boxf命令、circle命令のような描画処理命令で描かれたもの、picload命令で表示させたイメージだけです。
ちなみに、HSPが標準でサポートしてる画像保存機能は、このbmpsave命令だけです。GIFファイル、JPEGファイル、PNGファイルなどの画像イメージ形式で出力したい場合は、HSP拡張プラグインや汎用ライブラリを利用する必要があります。(→ HSP Tips 画像関連のプラグイン一覧)
○ スクリーン画面・ウィンドウ画面のキャプチャ
モニタのスクリーン画面、ウィンドウ画面そのもののスクリーンショットを保存(キャプチャ)したい場合は、Win32
API関数を呼ぶ必要があります。ちょくとさんのページ「Advanced
HSP」の「スクリーンキャプチャ」・「ウィンドウキャプチャ」をチェック!
bmpsave命令には出力ファイルパスを指定するパラメータしか存在しません。そのため、保存する画像データの基点(左上)、X方向・Y方向は必ず0です。そして、保存する範囲(サイズ)は用意した画面の大きさに依存します。
たとえば、下のコードはpicload命令でモード1指定(現在の画面にそのまま表示)を行ってるので、必ず640x480サイズの画像ファイルが出力されます。
// テキスト文章をBMPファイルで保存 ; テキストファイルを読み込む notesel buf noteload "readme.txt" ; 背景色 color , $FF boxf ; 文字表示 color , , $FF mes buf ; 画像ファイル出力 bmpsave "C:\\hogehoge.bmp" title "保存!"
// 「BMP/GIF/JPEG to BMP」の変換 ; ファイル選択ダイアログ dialog "bmp;*.gif;*.jpg", 16, "画像ファイル" if stat = 0 : stop ; 画像を表示 picload refstr, 1 ; 画像ファイル出力 bmpsave "C:\\hogehoge.bmp" title "保存!"
もし、画像の一部分を保存したい場合は、buffer命令で仮想のバッファ画面を用意しておき、いったんそこに保存に必要なイメージをgcopy命令、gzoom命令、gsquare命令などで切り出しコピーしてbmpsave命令する形になります。(画面の操作先を切り替えるにはgsel命令を利用)
// HSPの画面の一部をBMPファイルで保存 notesel buf noteload "readme.txt" color , $FF boxf color , , $FF mes buf ; 仮想画面を用意 ; (操作先が仮想画面1に移動) buffer 1, 300, 300 ; ウィンドウID0から切り出しコピー gcopy 0, 50, 50, 300, 300 bmpsave "C:\\hogehoge.bmp" ; 操作先をウィンドウID0に戻す gsel 0 title "保存!"
dialog "bmp;*.gif;*.jpg", 16, "画像ファイル" if stat = 0 : stop picload refstr imgsize = ginfo(12), ginfo(13) ; 画像サイズ取得 ; 仮想画面を用意 buffer 1, imgsize.0, imgsize.1 ; 上下反転コピー pos 0, imgsize.1 gzoom imgsize.0, -imgsize.1, 0, 0, 0, imgsize.0, imgsize.1 ; 画像ファイル出力 bmpsave "C:\\hogehoge.bmp" gsel 0 title "保存!"