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、プログラミング

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




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

コマンドリファレンス - Casio Basicプログラミング

Casio Basicプログラミング - コマンドリファレンス・トップ
<目次>

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

2018/01/09
追記修正 2019/08/17


純正Casio Basic と C.Basic に共通のコマンドがあり、C.Basic で純正コマンドを拡張したものがあり、さらに C.Basic 独自のコマンドがある。

入力コマンド


出力コマンド
 [純正 / C.Basic] [FX / CG] Menu

制御コマンド
 [純正 / C.Basic] [5800 / FX / CG] If ステートメント
 [純正 / C.Basic] [5800 / FX / CG] For ステートメント
 [純正 / C.Basic] [5800 / FX / CG] While ステートメント
 [純正 / C.Basic] [5800 / FX / CG] Do ステートメント
 [純正 / C.Basic] [5800 / FX / CG] Prog
 [純正 / C.Basic] [5800 / FX / CG] Return
 [純正 / C.Basic] [5800 / FX / CG] Break
 [純正 / C.Basic] [5800 / FX / CG] Stop

 [C.Basic] [FX / CG] Switch ステートメント
 [C.Basic] [FX / CG] ElseIf
 [C.Basic] [FX / CG] Gosub



 [C.Basic] [FX / CG] Local
 [C.Basic] [FX / CG] ACBreak

文字列
 [純正 / C.Basic] [FX / CG] + (文字列結合)
 [純正 / C.Basic] [FX / CG] StrJoin( 
 [純正 / C.Basic] [FX / CG] StrLen(
 [純正 / C.Basic] [FX / CG] 
StrCmp(
 [純正 / C.Basic] [FX / CG] StrSrc(
 [純正 / C.Basic] [FX / CG] StrLeft(
 [純正 / C.Basic] [FX / CG] StrRight(
 [純正 / C.Basic] [FX / CG] 
StrMid(
 [純正 / C.Basic] [FX / CG] Exp▸Str(
 [純正 / C.Basic] [FX / CG] Exp(
 [純正 / C.Basic] [FX / CG] StrUpr(
 [純正 / C.Basic] [FX / CG] StrLwr(
 [純正 / C.Basic] [FX / CG] StrInv(
 [純正 / C.Basic] [FX / CG] StrShift(
 [純正 / C.Basic] [FX / CG] StrRotate(

 [C.Basic] [FX / CG] ToStr(
 [C.Basic] [FX / CG] StrChar(
 [C.Basic] [FX / CG] StrCenter(
 [C.Basic] [FX / CG] Hex(
 [C.Basic] [FX / CG] Bin(
 [C.Basic] [FX / CG] StrRepl(
 [C.Basic] [FX / CG] 
Sprintf(
 [C.Basic] [FX / CG] 
文字列変数 Str

座標変換
 [純正 / C.Basic] [FX / CG] Pol( / Rec(

関数
 [純正 / C.Basic] [FX / CG] MOD(


グラフィックス


行列



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


 


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

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




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

fx-5800P で Mod を使いたい - Casio Basicプログラミング

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

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

2015/06/12
修正 2018/08/17

[純正] [5800P]
fx-5800P で整数の割り算の余りを求める Mod 関数を使いたい。



カシオのグラフ関数電卓 fx-CG50 / CG20 や fx-9860GII などに実装されている Mod 関数が、fx-5800P には無い。そこで、fx-5800P のプログラムで Mod 関数と同じ機能を実装する。


fx-9860GII などのグラフ関数電卓の Mod 関数
Mod は剰余を得る関数。fx-CG50 / CG20 や fx-9860GII では、1373 で割った余りは、Mod (137,3) で得られる。整数を格納した変数 AN を用いて、Mod (A,N) とすれば、AN で割った余りが求められる。


fx-5800P で Mod 関数と同じ機能を実現する
正の整数 A を 正の整数 N で割った時の商 Q と余り M は、以下の関係になる。

A = QN + M  ・・・(1)

一方、商 Q は以下のように現せる。

Q = Int(A÷N)  ・・・(2)


式(2) の Int( ) は、小数点を以下を切り捨てた結果の整数を求める関数だ。
式(2) を使って、式(1)の Q に代入すると、

A = N・Int(A÷N) + M

従って、式を変形して、余り M は以下の式(3)で現される。

M = A - N・Int(A÷N)   ・・・(3)


fx-5800P では、Mod(A,N) の代わりに以下の記述をすれば良い;

A-NInt(A÷N)

[2019/08/17 修正]
但し、Casio BasicMOD(A, N) と同じ動作とするには、A ≧ 0、N ≧ 0 (A, N0以上の整数) が前提条件となる。




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


 



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

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

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

Sprintf( - コマンドリファレンス

Casio Basicプログラミング - コマンドリファレンス
<コマンドリファレンス・トップ>

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

2018/01/17
追記 2018/02/05


[C.Basic] [FX / CG]


Sprintf(




数値から文字列へ変換する。書式指定が必要になる。なお、純正Casio Basicには数値から文字列への変換コマンドは無い。

(書式) Sprintf("書式指定子",引数1[,引数2[,引数3]])
※ 書式指定子はANSI Cの sprintf と完全互換ではない (下記参照)。
※ 引数は3個まで指定可能。
※ 引数が整数の場合はプレフィックス%を、実数にはプレフィックス# を指定する。
※ 引数のプレフィックスを省略した場合は、その時点での実行モード(実数か整数)に従う。

(注) Sprintf( は引数チェックをしていないので、間違った設定によりシステムエラーになる
   可能性有り。引数チェックのある ToStr( や他の文字列コマンド使用を検討しても良い。


(キープレス) [SHIFT]-[VARS](PRGM) [F6](▷) [F6](▷) [F3](ExStr) [F3](Sprintf)

(例) Sprintf("A=%4d B=%3.2f",%A,#B)
※ A=1234, B=45.68 の場合、変換される文字列は "A=1234 N=45.68" となる。

(例) Sprintf("%g%s",#1.234,"sec")→Str 1
※ Str 1 に代入される文字列は "1.234sec" となる。

(例) Sprintf("Result=%08.3f",#123.45)
※ 変換される文字列は、全8桁、小数点以下3桁でセロ詰めで "Result=0123.450" となる。

(例)
Sprintf ("%e",#123456.78)
※ 変換される文字列は、指数表示で "1.234568E+05" となる。

(例) Sprintf("%.3e",#123456.78)→Str 1
※ 変換される文字列は、小数点以下3桁の指数表示で "1.235E+05" となる。


書式指定子"%[フラグ文字][変換文字数指定][.小数点以下文字数指定]<変換指定子>"
(注) C.Basic for FX での書式指定子はCasio SDK準拠、C.Basic for CG は以下のようになる。
 " " の中に記述する
%に続いて以下の[フラグ文字]を指定する。指定しなくても良い。
 0 ゼロ詰めを指定するフラグ。左側に余った空白は全て0になる。
 空白 符号付き正の数の場合左側に1文字空白を空ける。
 - 左詰めを指定する。[F5](CHAR) のキャラクタ "-" 使用 [2018/02/05 追記]
続いて[変換文字数指定]で全文字数を指定する。指定しなくても良い。
さらに "." に続いて小数点以下文字数を指定する。指定しなくても良い。
最後に以下の<変換指定子>を指定する。これは必ず指定する。
 d 10進数整数に変換する。
 o 符号なし8進数に変換する。
 u 符号なし10進数に変換する。
 x 符号無し16進数に変換する。10~16までは小文字 a, b, c, d, f で表示
 X 符号なし16進数に変換する。10~16までは大文字 A, B, C, D, F で表示
 b / B 符号なし2進数に変換する。
 f 実数に変換する。
 e / E 指数に変換する。変換文字数指定は無視され、小数点以下文字数は有効
 g / G 実数か指数に最適化して変換する。
 s 文字列に変換する。




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


 

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





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

StrUpr( - コマンドリファレンス

Casio Basicプログラミング - コマンドリファレンス
<コマンドリファレンス・トップ>

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

2018/01/28

[純正 / C.Basic] [FX / CG]


StrUpr(




文字列を全て大文字に変換し、文字列として返す。

(書式) StrLwrt("<文字列>")
"<文字列>" に含まれる小文字を大文字に変換し、文字列として返す。

※最大文字列長は、純正Casio Basic の999に対してC.Basic は255となっている点に注意。

(キープレス) [SHIFT]-[VARS](PRGM) [F6](▷) [F6](▷) [F1](STR) [F6](▷) [F6](▷) [F1](UprLwr)

(例)
 StrUpr("ABcd123#√uvXYZ")→Str 1
※ "ABCG123#√UVXYZ" がStr 1 に代入される。

(例)
 "Casio Basic"→Str 1
   Locate 1,1,StrUpr(Str 1)
※ テキスト座標 (1, 1) に "CASIO BASIC" を出力する。



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


 


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




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

StrLwr( - コマンドリファレンス

Casio Basicプログラミング - コマンドリファレンス
<コマンドリファレンス・トップ>

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

2018/01/28

[純正 / C.Basic] [FX / CG]


StrLwr(




文字列を全て小文字に変換し、文字列として返す。

(書式) StrLwrt("<文字列>")
"<文字列>" に含まれる大文字を小文字に変換し、文字列として返す。

※最大文字列長は、純正Casio Basic の999に対してC.Basic は255となっている点に注意。

(キープレス) [SHIFT]-[VARS](PRGM) [F6](▷) [F6](▷) [F1](STR) [F6](▷) [F6](▷) [F2](Lwr)

(例)
 StrLwr("ABcd123#√uvXYZ")→Str 1
※ "abcd123#√uvxyz" がStr 1 に代入される。

(例)
 "Casio Basic"→Str 1
   Locate 1,1,StrLwr(Str 1)
※ テキスト座標 (1, 1) に "casio basic" を出力する。



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


 



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

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

StrLen( - コマンドリファレンス

Casio Basicプログラミング - コマンドリファレンス
<コマンドリファレンス・トップ>

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

2018/01/28

[純正 / C.Basic] [FX / CG]


StrLen(




文字列の文字数 (長さ) を返す。

(書式) StrLen("<文字列>")
"<文字列>" の文字数を返す。

※ 最大文字列長は、純正Casio Basic の999に対してC.Basic は255となっている点に注意。

(キープレス) [SHIFT]-[VARS](PRGM) [F6](▷) [F6](▷) [F1](STR) [F2](Len)

(例)
 StrLen("ABCDEF")→N
※ "ABCDEF" の文字数6が N に代入される。

(例)
 "Casio Basic"→Str 1
   Locate 1,1,StrLen(Str 1)
※ テキスト座標 (1, 1) に "Casio Basic" の文字数11を出力する。

(例)
 "NAME"?→Str 1
   "YOU ARE "+Str 1→Str 1
   Locate 22-StrLen(Str 1),3,Str1
※ 名前を入力させ Str 1 に一旦格納後、名前の前に YOU ARE を付加してStr 1 に格納。
※ Str 1 の長さから、右寄せで出力するための桁 (テキスト座標のY値) は 22-StrLen(Str 1) なので、
  これを用いて、Locate コマンドで YOU ARE xxx を右寄せで出力する。




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


 



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




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

StrRight( - コマンドリファレンス

Casio Basicプログラミング - コマンドリファレンス
<コマンドリファレンス・トップ>

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

2018/01/28

[純正 / C.Basic] [FX / CG]


StrRight(




文字列の右から所定の文字数だけ抜き出し、文字列として返す。

(書式) StrRight("<文字列>",n)
"<文字列>" の右端から n文字抜き出したものを文字列として返す。

※最大文字列長は、純正Casio Basic の999に対してC.Basic は255となっている点に注意。

(キープレス) [SHIFT]-[VARS](PRGM) [F6](▷) [F6](▷) [F1](STR) [F6](▷) [F2](Right)

(例)
 StrRight("UVXYZ",3)→Str 1
※ "XYZ" がStr 1 に代入される。

(例)
 "Casio Basic"→Str 1
   Locate 1,1,StrRight(Str 1,5)
※ テキスト座標 (1, 1) に "Basic" を出力する。



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


 



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

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

StrLeft( - コマンドリファレンス

Casio Basicプログラミング - コマンドリファレンス
<コマンドリファレンス・トップ>

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

2018/01/28

[純正 / C.Basic] [FX / CG]


StrLeft(




文字列の左から所定の文字数だけ抜き出し、文字列として返す。

(書式) StrLeft("<文字列>",n)
"<文字列>" の左端から n文字抜き出したものを文字列として返す。

※ 最大文字列長は、純正Casio Basic の999に対してC.Basic は255となっている点に注意。

(キープレス) [SHIFT]-[VARS](PRGM) [F6](▷) [F6](▷) [F1](STR) [F6](▷) [F1](Left)

(例)
 StrLeft("ABCDEF",4)→Str 1
※ "ABCD" がStr 1 に代入される。

(例)
 "Casio Basic"→Str 1
   Locate 1,1,StrLeft(Str 1,5)
※ テキスト座標 (1, 1) に "Casio" を出力する。

(例)
 "123456789ABCDEF"→Str 1
   StrLeft(Str 1,11)→Str 1
※ Str 1 が "123456789AB" になる。




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


 


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




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

+ (文字列結合) - コマンドリファレンス

Casio Basicプログラミング - コマンドリファレンス
<コマンドリファレンス・トップ>

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

2018/01/27

[純正 / C.Basic] [FX / CG]


+ (文字列結合)




文字列を結合する。

(書式) "<文字列1>"+"<文字列2>"[+"<文字列3>"[+...+"<文字列n>"]]
"<文字列1>" の右に "<文字列2>"、その右に "<文字列3>"、... "<文字列n>" を結合する。

※ 最大文字列長は、純正Casio Basic の999に対してC.Basic は255となっている点に注意。

(キープレス) [+]

(例)
 "ABC"+"DEF"→Str 1
※ "ABCDEF" がStr 1 に代入される。

(例)
 "Casio "→Str 1
   "Basic"→Str 2
   Locate 1,1,Str 1+Str 2
※ テキスト座標 (1, 1) に "Casio Basic" を出力する。

(例)
 "GHI"→Str 1
   "ABC"+"DEF"+Str 1→Str 1
※ Str 1 が "ABCDEFGHI" になる。




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


 


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

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





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

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

やす (Krtyski)

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


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

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

なお管理人はカシオ計算機の関係者ではありません。いつでもどこでもプログラミングができるプログラム電卓が好きな1ユーザーです。


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR