プレイ日記
画像データを文字列にする関数を作ってみた GSPOITで読み込んでビットをなんやかんやしてから文字にしてやればいいかなって思って、指定した範囲のビットを抜き出す関数作ったんだけど……範囲の指定の仕方が悪かったのか、なかなか出来ないからGSAVEとGLOADで妥協したよ。 あとはこっから改良していくよ
6そうだね
プレイ済み
返信[1]
親投稿
どっかで見た手法を用いて圧縮を試みるよ 0から数えるとして、偶数番目の配列を連続した色の数、奇数番目を色情報にしてみたよ これでダミー(スプライト画面の384,452にある32,32の大きさの画像)を文字列化してみたけど、旧式の方が文字列が少なく済むみたい。ドット絵は同じ色が連続してくることが少ないからこういうことが起きるんだと思うよ。
0そうだね
プレイ済み
返信[2]
親投稿
Godot orz_127
圧縮迄は考えていないけど…。 プチコン3号での色は物理で16bit。 文字コードもメモリ上ではUTF-16の16bit。 なので、GSAVEで物理色で配列に読み込み、各配列の値をCHR$()しつつつなげていけば、画像を文字列に。
0そうだね
プレイ済み
返信[3]
親投稿
というわけで以前使ったハカセの画像(160,282の大きさ)を使ってみるよ そうすると、圧縮版は画面7.5個分の文字列に対して、旧式は画面36.5個文の文字列になったよ。およそ4倍だね。 あと、圧縮版は時間はそれほどかからなかったけど、旧式は10秒以上は掛かったと思うよ。ゲームでロードするために暗転する時間があるけど、その中に組み込んだらかなりイラつくって思うな。 とりあえず、小さな画像をプログラム内でせわしく張り替えるようなことがある場合は旧式、うpするために大きな画像のサイズを小さくしたい場合は圧縮版がいいと思うよ。まだグラフィック関係やビットの仕様を把握できてないところがあるから、そこらへんを改善すればもう少しコード短くなると思うな。
0そうだね
プレイ済み
返信[4]
親投稿
上が旧式、下が圧縮版でそれぞれ文字列化したハカセのサイズだよ ただこれ、今回はイラストツールで描いたやつを圧縮させたから、同じ色が来やすいようになっているよ。だから、RPGゲームと同封するドット絵を圧縮させようとすると、大して変わらなくなってきちゃうかも。
0そうだね
プレイ済み
返信[5]
親投稿
SPGEDで文字列変換させてみたよ。 時間を測定してみたところ、旧式が1,47.65、圧縮番が0,58.79だったよ。サイズ見てみると圧縮する意味があまりないね。 (´・_・`)
0そうだね
プレイ済み
返信[6]
親投稿
2バイト文字は3バイトらしい(文章に表すと矛盾がすごい)
0そうだね
プレイ済み
返信[7]
親投稿
マジかよ…… じゃあ結局は数値配列の方が結果的には要領少なくて済むのか…… 後教授頂きありがとうございます(血涙)
0そうだね
プレイ済み
返信[8]
親投稿
32,32の大きさのでやってみた うーん……数値配列の状態で書き出してみると文字列のより画面の占有率高い上に重い……
0そうだね
プレイ済み
返信[9]
親投稿
あ、上から旧式、圧縮版、数値配列の順です
0そうだね
プレイ済み
返信[10]
親投稿
Godot orz_127
プチコン3号の場合、メモリ上はUTF-16ですがファイルにするとUTF-8になるようです。 アスキーコードのように1バイト文字は恐らく1バイトのままとおもわれますが、2バイト文字は3バイトになってしまうかと。 なのでサイズを気にするなら2バイト文字は整数型の%なら2文字、実数型の#なら4文字とか詰め込んで、そのまま数値データとして扱った方がサイズが小さくなるかと。
0そうだね
プレイ済み
返信[11]
親投稿
MIKI ifconfig
うんうん、 一文字 16bit 入るから、 U+0000~U+00ff が連続したら、上位8bitと下位8bitに詰め込んで、 U+0100~U+ffff だったらそのまま という感じで、プログラムとか相当圧縮できるぜ!! と思って実行したら、余計増えて頭抱えたのはいい思い出です。
0そうだね
プレイ済み