BMPファイルのロード - Casio Basicプログラミング

Casio Basicプログラミング
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

2018/01/08
追記修正 2020/01/17


[C.Basic] [FX / CG]

ビットマップファイルをロードして描画したい。



C.Basic では、ビットマップファイルを呼び出し、ロードして表示することができる。これは純正Caso Basicではできない。

C.Basic のグラフィックス画面は、フル画面モードで最大 384 x 216 ピクセル、標準モードでは 最大384 x 192 ピクセルのビットマップファイルを表示できる。

BmpLoad コマンドでロードする最低限のコード
BMPフォルダにある TEST.BMP をロードする例。

(サンプルプログラム) 
BmpLoad("/BMP/TEST")
ビットマップファイルの拡張子 .BMP を省略できる。画像の左上が座標 (0.0) になるように描画される。

純正Casio Basic はテキスト画面とグラフィックス画面の2つを区別して出力する仕様で、テキスト系コマンドを実行するとテキスト画面に出力、グラフィックス系コマンドを実行するとグラフィックス画面に描画する。そしてテキスト系とグラフィックス系のコマンドの出力先を同じ画面にできない仕様になっている。

一方、C.Basic では、出力先を自由に指定でき、グラフィックス画面にテキスト系コマンドを出力したり、テキスト系コマンドをグラフィックス画面出力可能。テキスト系コマンドとグラフィックス系コマンドを同じ画面に出力することも可能。

描画するビットマップ画像の左上の座標を指定することもできる。

(サンプルプログラム) 
BmpLoad("/BMP/TEST.BMP"),0,0
TEST.BMP の画像の左上を 座標(0.0) に指定して描画する。

純正Casio Basicのグラフィックス描画領域は 379 x 187 ピクセルであるが、C.Basic の標準モードでは 384 x 192 ピクセルで、さらにフル画面モードでは 384 x 216 ピクセルになっている。標準モードの画面の左上の座標は (0, 0) で、フル画面モードでの画面の左上の座標は (0, -24) となる。

そこで、最大 384 x 192 ピクセルのビットマップファイルをロードし、画面左上に併せて描画するには、上の2つの書式が使える。

一方、フル画面モードで最大 384 x 216 ピクセルのビットマップファイルをロードして表示するには、フル画面全体をクリアする_ClrVram コマンド実行することでロード先をフル画面に切替えた後、フル画面の左上の座標 (0, -24) を画像の左上に指定することもできる。

(サンプルプログラム)
_ClrVram
BmpLoad("/BMP/TEST.BMP"),0,-24,0
左上の座標の設定に続いて、0 を指定しているが、これはロード先を背景だけに指定するパラメータ。

なお、これまでのサンプルプログタムではロード先にテキスト画面かグラフィックス画面かを明示的に指定していない。
出力先を指定する Screen コマンドを使い、Screen.T とすればテキスト画面、Screen.G とすればグラフィックス画面が指定される。

グラフィックス画面をフル画面にし、その背景のみに 384 x 216 ピクセルのビットマップファイル (TEST.BMP) を描画するコードは以下のようになる。

(サンプルプログラム)
Screen.G:_ClrVram
BmpLoad'/BMP/TEST"),0,-24,0

ビットマップファイルの拡張子を省略している。


 ロードするビットマップファイルのファイル名を入力させる例
フル画面モードで最大 384 x 216 ピクセルのビットマップファイルをロード&描画する。

(サンプルプログラム)
'= Key-in file name
"_ _ _ _.BMP"→Str 1
"Input file name"?Str 1

'= Load BMP file
Screen.G:_ClrVram
BmpLoad(Str 1),0,-24,0


なお、ビットマップファイルは予めストレージメモリに転送しておく。呼び出す際はフォルダに対応していて、例えばBMPフォルダにある TEST.BMP をロードするには、この用例では /BMP/TEST.BMP と入力する。


入力時にエラーがあると、エラーメッセージと共にプログラムが中断する。そこで、エラー処理を追加してプログラムが中断しないようにする。

エラー処理を含んだ BMPファイルのロード&描画する例

(サンプルプログラム) ダウンロード: LOADBMP.g3m
'==BMP file loading routine==
' Ver 1.0  Krtyski//e-Gadget


'= Key-in file name          <ブロック1>
' file name→Str _1
"_ _ _ _.BMP"→Str 1
"Input file name"?Str 1


'= Check file existance        <ブロック2>
' exist:    S=file size
' not exist:  S=0 & Return -1

IsExist(Str 1)→S
If S=0:Then
"Not exist"
Return -1
IfEnd

'= Check BMP file format       <ブロック3>
' not BMP file: Return -1

""→Str 2         
[2020/01/17 追記: C.Basic for CG Ver 1.43での仕様変更のため]
{3,1}→Dim Mat θ.B
Load(Str 1)→Mat θ
For 1→I To 2
Mat θ[I]→Mat r
[2,I]
Next
0→Mat r
[2,3]
ClrMat θ
If StrCmp(Str 2,"BM"):Then
"Not exist"
Return -1
IfEnd

'= Load BMP file in         <ブロック4>
' back ground of text screen

Screen.G:_ClrVram
BmpLoad(Str 1),0,-24,0



<ブロック1>
ビットマップファイルをキー入力させる。
入力したファイル名を Str 1 に格納。

<ブロック2>
入力したファイル名 (Str 1) がフォルダ内に存在するかどうかを IsExist コマンドで調べる。
IsExist はファイルが見つかればそのファイルサイズ、見つからなければ 0 を返す。
そこで、S が 0 ならば Not exist と表示して、Return -1 を実行して、プログラム終了。
このルーチンを GosubProg コマンドで呼び出す場合は、-1 が返るのでエラー判定可能。

<ブロック3>
見つかったファイルがビットマップファイルかどうかを判定する。
ビットマップファイルはファイルの最初の2バイトが BM になっていることを利用。
この部分は、g3mファイルの場合は60バイト目からのファイル名を調べるなどに応用できる。
最初の2バイトが BM かどうかは、StrCmp コマンドで判定。一致すれば 0 を返し、そうでない時は 1 か -1 を返すので、0でない時 Not exist と表示して Return -1 を実行しプログラムを終了する。

<ブロック4>
ビットマップファイルをロードし、テキスト画面の背景に表示する。
ここまで来れば、入力したファイル名がビットマップファイルなので、BmpLoad コマンドでロードする。
BmpLoad(Str 1),0,-24,0 は、Str 1 のビットマップファイルをフル画面モードの左上の座標 (0, -24) から背景として描画する。




応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: プログラム関数電卓、Casio Basic、C.Basic、プログラミング

リンク集 | ブログ内マップ




関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

プログラムライブラリ - OS内蔵ファンクションメニュー探索

プログラムライブラリ
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

2019/05/28
修正 2020/01/13


OS内蔵ファンクションメニュー探索 - SysFunc Ver 1.3


※ [2020/01/13] C.Basic for CGSysFinc Ver 1.3 を差替え再々アップデート (5桁の F-Key# へ対応できるように修正)


著作権者

やす (Krtyski)
[当ブログ管理人]



対応機種

- Casio fx-CGシリーズ - C.Basic for CG で動作
- Casio fx-9860Gシリーズ、fx-9750GIII - C.Basic for FX で動作



プログラムの説明

ファンクションキー探索プログラム - Check System F-Key

fx-CGシリーズ や fx-9860Gシリーズ、fx-9750GIII のOSには、ファンクションキーの様々なアイコン画像が内蔵されており、それぞれに System Function Key# が割り当てられている。C.Basic の独自コマンド FKeyMenu( は、[F1] から [F6] の位置に ファンクションメニューを表示できる。その際、OS内蔵の System Function Key# を指定すると内蔵されている画像を利用できる。そこで、ファンクションキーのアイコン画像と Key # を調べるために本プログラムを作成した。

その後 C.Basic for CG に独自のファンクションキーのアイコンを装備する計画があり、それに併せてプログラムを更新した。

  C.Basic for CGFKeyMenu( コマンドで呼び出せる Function Key# を調べる
  1. 画面左下に システムファンクションキーを表示する
  2. カーソルキーで システムファンクションキー#をスキャンする
   - カーソルキーの長押しで連続スキャン
   - 左右 / キー (◀▶) で1づつ Step スキャン
   - 上下 / キー (▲▼) で50刻みの Skip スキャン
  3. [F4](INPUT)[EXE] キーで数値の入力
  4. [F5](HELP) で使い方説明
    
   SysFunc3_2_1_f SysFunc3_2_2_f2 SysFunc3_2_3_f 
  ※ [2020/01/13 差替えアップデート]
    C.Basic for CG 独自に実装する(予定)の Function Key アイコンは F-Key# 10001 以降。
    それに対応するため 5桁の F-Key# に対応するよう変更した。
  ※ [2020/01/13 差替え再アップデート]
    システム内蔵Function Keyアイコンの上限番号はOSバージョンに依存するので、
    OSバージョンを自動判定し、仕様機種とOSに応じた上限番号を表示するように変更した。
機種OSバージョン判定に使ったOSバージョンFunction Key上限番号
    fx-CG101.04.32001.041248
fx-CG202.02.02002.021276
fx-CG103.10.32003.101378
fx-CG203.11.02003.111379
fx-CG503.20.02023.201394
fx-CG503.30.02023.301400
  ※ [2020/01/13 差替え再々アップデート]
    カスタムFunction Keyアイコンを Function Key アイコンは F-Key# 10001 以降。
    F-Key# が 10001 以上の時は、画面中央に Custom F-Key# と表示
    それ未満の時は、画面中央に System F-Key# と表示するように変更した。
    
  C.Basic for FXFKeyMenu( コマンドで呼び出せる System Function Key# を調べる
  1. 画面左下にシステムファンクションキーを表示する
  2. カーソルキーで システムファンクションキー# をスキャンする
   - カーソルキーの長押しで連続スキャン
   - 左右 ←/→ キー(◀ ▶) で1づつ Step スキャン
   - 上下 ↑/↓ キー (▲ ▼) で50刻みの Skip スキャン
  3. [F4] (INPUT)[EXE] キーで数値の入力
  4. [F5] (HELP) で使い方説明

   SysFunc3FX_1 SysFunc3FX_3 SysFunc3FX_2 



プログラムファイルのダウンロード

※ fx-CGシリーズ用
   SysFunc3.g3m のダウンロード

※ fx-9860Gシリーズ、fx-9750GIII 用
   SysFunc3.g1m のダウンロード




応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: fx-5800PCasioBasic、プログラムライブラリプログラム関数電卓

リンク集 | ブログ内マップ


関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

謹賀新年2020


Mouse 
Ratties

新年明けまして、おめでとうございます。

今年は何があるのか、楽しみです!
新しい動きにチューいぶかく
チューもくしてゆきます。

アドインMicroPythonの充実?
C:Basicコンパイラの登場?
fx-5800P後継機種の発表?
さらに...


子 
令和2年 元旦

Krtyski (やす)






関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

最新記事
検索フォーム
最新コメント
カテゴリ
C# (3)
Visitors
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

Author:やす (Krtyski)
since Oct 30, 2013


プログラム電卓は、プログラムを作って、使ってナンボ!

プログラム電卓を実際に使って気づいたこと、自作プログラム、電卓での Casio Basic や Casio Python プログラミングについて書いています。

なお管理人はカシオ計算機の関係者ではなく、Casio Basicが面白いと感じる1ユーザーです。


写真: 「4駆で泥んこ遊び@オックスフォード郊外」

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR