Petitverse
ゲストさん (
ログイン
)
ログイン
コミュニティ内検索
コミュニティ一覧
Petitverse ご利用ガイド
Petitverse からのおしらせ
プチコン 非公式コミュニティ
トピック
SOU
◆PY5UW/bdgc/d
2017/12/16 15:43
質問
DATAでのSPの作り方について
よく分からないので教えてください。
普通にSPをセーブすると
容量がデカいので。
補足 : SPの画像です。
コメント
なぎ
2017/12/16 22:48
◆2vQDAT5B8579
>※プチコンのTXTファイルは内部でUTF-8として扱われてる模様。
まじかー。そういえばプチコンにTXTファイル転送してるときUTF-8に変換してるなー(*´ー`*)
はる
2017/12/16 22:59
◆75Vh4SY8TdKS
http://petitverse.hosiken.jp/community/petitcom/diary/?read=243
この投稿(自分の投稿)に少し色コード変換処理について書かれているので、
観てみて下さい。
普通にやる方法とGSAVEを使った方法が書いてあります。
はる
2017/12/16 23:13
◆75Vh4SY8TdKS
前に画像をDATA文に変換するプログラムを作りましたが忘れたので、
もう1度作りました。
画像があるページ,U,V,W,Hと、
書き込みたいプログラムSLOTには任意の数を入れて下さい。
DIM G%[0]
GSAVE 画像があるページ,U,V,W,H,G%,1
FOR I%=0 TO LEN(G%)-1
INC D$,CHR$(G%[I%])
NEXT
PRGEDIT 書き込みたいプログラムSLOT
PRGINS "DATA "+CHR$(34)+D$+CHR$(34)
多分これでできると思います。
ZEX
2017/12/16 23:14 ネタバレ
◆4KARjPkip/WS
>キルル2さん
プチコンの文字は65536文字ではないんだな。
プチコンではUTF-16の16bit部分のみ扱うというものだ、近いけどね。
UTF-16は16bit固定の文字コードではなく、文字コードがサロゲートペアだった場合、続く16bitコード含めて1文字として扱う。
プチコンではサロゲートペアは多分処理していないが、
サロゲートペアのコードは正式な文字ではないから65536文字ではない。
更にプチコンでは文字フォントが存在しない文字コードも多く・・・って
話が脱線しちゃったね。
このコメントはネタバレを含んでいます。
このコメントをひらく
はる
2017/12/16 23:22
◆75Vh4SY8TdKS
読み込むには、
予め読み込むデータにREADのポインタ?を当てておいて、
DIM G%[0]
READ D$
FOR I%=0 TO LEN(D$)-1
PUSH G%,ASC(D$[I%])
NEXT
GLOAD U,V,W,H,G%,1,1
でできると思います。
こちらもU,V,W,Hを任意の数にして下さい。
こちらも確認していません。
ほしけん
2017/12/17 2:24
◆BJ4kbE35MkgI
http://wiki.hosiken.jp/petc3gou/?Toukou%2FGPK%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA
私が作ったこちらはいかがでしょうか?
DATA文にはできませんが文字列にはできます。
はる
2017/12/17 6:49
◆75Vh4SY8TdKS
すごいですね。
自分は改行や"と重なることは考えていませんでした。
自分のは"はRGB(0,0,0,136)で透明色で、
␊もRGB(0,0,0,40)で透明色なので、まあいいかと思いましたが、
␍はRGB(248,0,0,48)なので注意が必要だと思いました。
↓
New3DS大豆マン
2017/12/17 6:51
◆2FCk4r5A9R8g
http://wiki.hosiken.jp/petc3gou/?Toukou%2FGRP%A2%CEDATA%CA%D1%B4%B9%BC%AB%BA%EE%CC%BF%CE%E1%BD%B8
私の作った、画像をDATAに出来る自作命令です。
はるさんが「文字コードとして文字に変換して文字列にすればいいと思います。データの量にも無駄がな」い
といっていましたが、更に無駄を省きました。(3つ以上続いている同じ色コードを2文字(あまりに続いていたら3文字)で収めます。この処理でデフォルトSPの画像を圧縮した所、1ドット、約0.57文字で変換できました)
改行や、「"」を回避しているのでDATAに出来ます。(出力されたときにすでにDATAになっています)
使い方はプログラムのコメントを参照して下さい。(説明が下手で分かりにくいかもしれません)
はる
2017/12/17 6:58
◆75Vh4SY8TdKS
ちなみにこんな感じのデータが出力されます。
1文字が1ドットになっていますが、改行が無いので分かりづらいですね。
それに1行の文字数が多く、3号の場合すごく重くなります。
なので、改行を作った方がいいかもしれません。
はる
2017/12/17 7:47
◆75Vh4SY8TdKS
自動で改行をするバージョンを作りました。
はる
2017/12/17 7:48
◆75Vh4SY8TdKS
↑の読み込み方です。
ここではためしに苺のスプライトでやってみました。
改行すると、視覚的にも分かりやすいですね。
キルル2
2017/12/17 10:49 ネタバレ
◆rGE712Ruejv7
>ZEXさん
ええ、違うんですか!
一部、正式な文字ではないものがあるからそれはカウントしないという感じ?ですか?
文字コードは65536通りでも実際の文字はそれより少ないということですかね?
このコメントはネタバレを含んでいます。
このコメントをひらく
ほしけん
2017/12/17 10:55
◆BJ4kbE35MkgI
> それはDATA文にすることができるので、
> DATA文にできるといってもいいと思います。
ダブルクォート、つまり CHR$(34) が混じる可能性があるのでDATA文に押し込めません。
エスケープするように改造したらいけますが改造が必要です。
SOU
2017/12/17 11:07
◆PY5UW/bdgc/d
できました。
ありがとうございます。
はる
2017/12/17 11:20 ネタバレ
◆75Vh4SY8TdKS
キルル2さん
正式な文字ではないというか、
Unicodeの代用対などの特殊なコードがあるからだと思います。
まあ、プチコンで扱う分には問題ないと思いますが。
ほしけんさん
それは考えていませんでした。
すいません。
あれは消しておきます。
このコメントはネタバレを含んでいます。
このコメントをひらく
ZEX
2017/12/17 14:09
◆4KARjPkip/WS
え?、画像データを文字列で保存しようとしてるの?効率悪いよ?
プチコンはメモリ上はUTF-16の16bitのみだけど、テキストファイルに保存する時UTF-8に変換してる。
メモリ上2BYTEの文字だが、UTF-8では日本語全角文字部分は3BYTEになる、データ量は1.5倍だ!なので効率悪いんだよ!
バイナリで保存した方が無駄がない。
ZEX
2017/12/17 14:35
◆4KARjPkip/WS
質問者は恐らく、SAVE "GRP4:FILENAME" でグラフィックページ全体をまるごと保存してしまってファイルサイズが大きくなっているのではないかと推測します。
その場合、対策としてはグラフィックの必要最小限の領域をGSAVE命令で配列変数に入れ、配列変数をSAVE "DAT:FILENAME"で保存すれば、ファイルサイズは無駄に大きくならずに済む。
たんじぇ
2017/12/18 11:26
◆WDmFkVwZ4yMl
流れとして、SP保存したらファイルでかいのでDATAでサイズ小さく保存してるの見たことあるのでDATAで保存したい、って見えるのです。
なので目的が2つあって
・SP保存でファイルでかいのでなんとかしたい→自作SPだけをGSAVEか何かで保存して使うようにする
・DATA文で保存しておきたい→保存したSPだけをDATAに文字列として出力したい(みんなが回答している内容)
という感じ
SP保存を全部するとでかいのは、GSAVEで範囲指定すればOK、これはサイズ縮小の目的。
DATAで保存しておきたいのは、SP用のファイルをわざわざ準備しなくても、プログラムファイル1つ配布するだけでSPも作ってくれるけど、DATAをどうやって作るかは、どんなプログラムを作るかの考え方次第。
みんなが書いている方法は、SP用の画像データ(GRP領域)を読み出して、画像の1ドットのデータが16bitで、1文字もいちおう16bitなので、そのまま文字として扱っているというもの(1文字が16bitじゃないのはUTF-16をいろいろ調べてもらえると)
とはいえDATA文もプログラムの文法に乗っ取っているので、DATA文としてなりたたないような「画像データからDATAに変換した値」(ダブルクォーツとカンマの組み合わせや改行など)が存在した場合にDATA文が文法エラーなどになってしまうのでなんとか考えないとというところ。
プログラムと画像データファイルを分けたくないという目的なら、16bitデータをそのまま16bit文字にするのではなく、16進数文字列として保存するのが安全です。(DATA "FF007F00AC004433"みたいな感じ)
文字データなので数値に変換してGRPに描く事はしないと行けないですが。
この方式だと1つのファイルで扱えるけどデータ量は増えるというやりかたです。
データ量が増えたくないならDATA文の持ち方をなんとかするか、今のままファイルを分けておくかという方法になります。
たんじぇ
2017/12/18 11:27
◆WDmFkVwZ4yMl
(1投稿全角1000文字までって言われた!)
一応もうちょっとお手軽な方法としてはデータを BASE64 で変換した情報を持つというもの。
16進数文字の場合 DATA文の1文字で画像データ4bit分しかないけど、BASE64だと1文字で画像データ6bit分持てるので、すこしはデータ量が減ります。
それでもちゃんとデータ量を減らすなら、なにかしらの圧縮方法を考えないとというところです。
画像圧縮方法は世の中にたくさんあったり、やりかたがたくさんあって、こういう画像ならこのやりかたが圧縮率高いとかありますが、
そこまでして画像データの容量を減らすよりは、先に作りたいプログラムを作って、あとで時間があるときに圧縮について調べるのがいいと思います。
SOU
2017/12/28 13:45
◆PY5UW/bdgc/d
…もう解決したので閉めます。
1
2
コメントを書く
この投稿にはコメントできません。
-
WEB PATIO
-