プレイ日記
otta777 otta777a
グラフィック画面の一部をSAVE "GRPn:ファイル名"でセーブするより小さいサイズでセーブする命令を作ってみました。400×240のサイズで192KB程のファイルになります。そのファイルをグラフィック画面にロードする関数も同梱してます。
7そうだね
プレイ済み
返信[1]
親投稿
otta777 otta777a
動作確認用のプログラム部分。
0そうだね
プレイ済み
返信[2]
親投稿
みむ*mim hidemimtp
よく知らないんですが、グラフィック1ドットのデータって上位16ビットに何もデータ持ってないんでしたっけ?
0そうだね
プレイ済み
返信[3]
親投稿
otta777 otta777a
>みむ*mimさん GSAVE命令で色変換フラグを「物理コードのまま」にして整数型配列変数を 使うと上位16ビットは0なんですよ。上位16ビットに次のドットの情報を 格納すればファイルのサイズは半分に出来るかもって思いつきで 作ったのがこの関数です。
1そうだね
プレイ済み
返信[4]
親投稿
otta777 otta777a
GSAVE ファイル名,ページ番号,X座標,Y座標,幅,高さ ファイル名にはGRPn:やDAT:などのリソース名は含まない事。 ページ番号で指定したグラフィック画面の座標X,Yから幅、高さの サイズのグラフィックをファイルにセーブする。 GLOAD ファイル名,X座標,Y座標,幅,高さ ファイル名にはGRPn:やDAT:などのリソース名は含まない事。 PAGE命令で指定された描画ページにグラフィック画面の 座標X,Yから幅、高さのサイズでファイルからロードする。 セーブしたときと同じ幅、高さを指定しないと絵が崩れる。 引数のチェックは省略してます。
0そうだね
プレイ済み
返信[5]
親投稿
otta777 otta777a
公開キー:E23X7WQE
0そうだね
プレイ済み
返信[6]
親投稿
SAVE"GRPn: だと「16bit整数型配列」になるとかで…確か肥大しないらしいけど…うろ覚え
0そうだね
プレイ済み
返信[7]
親投稿
otta777 otta777a
>あまさと しおん ええ、そうです。ただ領域指定が出来ないんで上画面の400×240の エリアにしか描いていなくても512×512ドットのサイズでセーブ されるため512KBのサイズになってしまうんですよ。 背景画像を複数実装してるゲームで1プロジェクトに収まらない ものもあるので絵を描いている範囲だけGSAVEでセーブですれば と思ったら整数型配列変数は32ビットで思った程 小さくならなかったんです。色変換フラグを物理コードのままに 指定すれば1ドット16ビットなので1つの変数に2ドット分の情報を 持たせて半分の容量にできるのでは?と考えました。 圧縮は1/2にしかなりませんがビットシフトとOR命令で行ってるんで スピードは速いと思います。
1そうだね
プレイ済み
返信[8]
親投稿
otta777 otta777a
画像サイズの高さ、幅が奇数の場合にエラーになっちゃうバグが残ってました^^;;; 13行目のDIM命令の前に IF LEN(B%) MOD 2!=0 THEN PUSH B%,0 を追加して下さい。 配列変数の要素数が奇数になる場合にB%[I%+1]の部分で配列変数の 要素数の範囲を超えてしまっていました。
1そうだね
プレイ済み
返信[9]
親投稿
otta777 otta777a
>ぐーぐさん INBY%は1024でないとかけ算をして10ビット上位にシフトできないですよ。 データの変換のためのFOR~NEXTのループ内にIF命令が入ると 処理速度が落ちてしまうんでIF命令を使わなくてもいいような 細工をすると高速化できます。 自分の場合はFOR~NEXTでSTEP 2で増分を2としてループ内では I%+1で配列の数値を参照するようにしてIF命令を排除しています。
0そうだね
プレイ済み
返信[10]
親投稿
otta777 otta777a
説明を書き忘れてました。 GSAVE_FILE ファイル名,転送元ページ,始点X,始点Y,幅,高さ 指定したグラフィックページの指定した範囲の画像データを ファイル名で指定した名前のデータファイルとして保存します。 1ドット2バイトでセーブされるため上画面の400×240ドットで 約190KBになります。
0そうだね
プレイ済み
返信[11]
親投稿
otta777 otta777a
GLOAD_FILE ファイル名,始点X,始点Y,幅,高さ ファイル名で指定した名前のデータファイルから GPAGE命令の操作ページで指定したページに 指定した範囲の画像データを描画します。 GSAVE_FILEで指定した幅、高さを指定しないと エラーになる場合があります。 画像サイズもセーブするように改造した方が良さそうですね^^;;;
0そうだね
プレイ済み
返信[12]
親投稿
otta777 otta777a
FN$="SAMPLE01.DAT" 'ファイル名 PG%=0 ’転送元ページ X%=0 '始点X Y%=0 '始点Y W%=400 '幅 H%=240 '高さ GSAVE_FILE FN$,PG%,X%,Y%,W%,H% でセーブできます。 ロードをする場合は変数の設定とGPAGE命令で画像を 読み込むページを指定した後に GLOAD_FILE FN$,X%,Y%,W%,H% でロードできます。
0そうだね
プレイ済み
返信[13]
親投稿
otta777 otta777a
GSAVE_FILE,GLOAD_FILEを仕様変更してセーブデータに 画像のサイズを記録するようにしました。 こちらのプログラムは公開を終了します。 新しいプログラムは別のプレイ日記に書き込みますので そちらをご覧下さい。
0そうだね
プレイ済み