トピック
MIKI ifconfig

画像圧縮伸張

画像圧縮伸張コードを評価しています。 これはミバ絵(320x120x1bit=4800byte)ですが、2840byteに圧縮できました。伸張+描画に new3DSで 0.20s, 旧3DSで 0.74s かかります。 (このトピの一連の画像は、もちこさんという方の作品です。 https://miiverse.nintendo.net/users/mochikochan0326/posts)
22そうだね
プレイ済み
返信[1]
親投稿
MIKI ifconfig
作者(と保護者の方)の許可を頂いて転載しております。 この絵は 3432byte に圧縮、描画は new3DS=0.22s, 3DS=0.83sです。 基本 run length なのでベタ塗りが多いほど圧縮効果が高まります。この絵は斜め線が多いので、最初の例よりも圧縮率が悪く、伸張にも時間がかかります。
1そうだね
プレイ済み
返信[2]
親投稿
MIKI ifconfig
この作品はベタ塗りが多く細かい模様が少ないので、1672byte に圧縮できました。伸張時間は new=0.15s, old=0.54s です。
1そうだね
プレイ済み
返信[3]
親投稿
MIKI ifconfig
これは縦線模様の面積が大きいため圧縮率が悪く 4172byte となっています。伸張は new=0.26s, old=0.96s です。
1そうだね
プレイ済み
返信[4]
親投稿
otta777 otta777a
網掛けや市松模様のようなトーンの効果を使った画像は 圧縮率が落ちてしまいますね。 4800byteを大幅に越える様な絵が多いときは絵の タッチによって圧縮方法を使い分ける工夫も考えられます。 ちなみに320×120の全面市松模様をセーブするとファイルの サイズと伸張+描画時間はどうなりますか? ドットのオンを1、オフを0としてビットパターンで保存すると 320×120サイズでファイルサイズは4828バイトでした。 自分で作ったビットパターンで圧縮するプログラムでは new 3DSで伸張+描画に0.18秒ほど掛かります。
1そうだね
プレイ済み
返信[5]
親投稿
ナツキ natukin1978
これはモノクロ(2値)専用なのかな?
1そうだね
プレイ済み
返信[6]
親投稿
MIKI ifconfig
otta777さん あら、400x320で作っちゃった! 24320バイト (152%ww) 圧縮=4.06s 伸張=1.41s 話になりませんね。
0そうだね
プレイ済み
返信[7]
親投稿
MIKI ifconfig
ナツキさん 逆に 1 画素 16bit の indexed color 扱いですね。モノクロの場合 0 と 65535 の二値として扱います。 画像はこりんごさんの「TOBIKOMI」第一話第一コマです。 4024バイト/(400x240x16bit)=1.6% に圧縮、圧縮=0.82s 伸張=0.37s (new3DS) この手のセル画っぽい画像に対しては驚くほどの圧縮率を期待できます。
0そうだね
プレイ済み
返信[8]
親投稿
MIKI ifconfig
ひまりさんが描かれたナナメくんです。 67548/(320x240x16bit) = 44% 約半分 圧縮=15.06s, 伸張=1.98s 圧縮時間のかなりの部分がカラーコードのソートに費やされています。 単純比較ソートなので、多色になるとO(n^2)で遅くなります。
0そうだね
プレイ済み
返信[9]
親投稿
MIKI ifconfig
lena 様 90228/(256x256x16bit) = 69% 圧縮=12.85s, 伸張=2.66s このようなグラデーション系は圧縮率悪いです。 伸張も遅いですね。
0そうだね
プレイ済み
返信[10]
親投稿
MIKI ifconfig
プロ生ちゃん 80320/(400x240x16bit)=42%, 圧縮=18.61s 伸張=2.4s グラデーションで色数が多いので圧縮が大変遅いです。 quicksort を実装した方がいいですね。
0そうだね
プレイ済み
返信[11]
親投稿
MIKI ifconfig
市松模様計算ミスがありました。 24320/(400x240/8bit)=203% 倍に増えましたww
1そうだね
プレイ済み
返信[12]
親投稿
MIKI ifconfig
quick sort 実装しました。不安定な sort なので、ちょっとだけ気持ち悪い。 不安定でも 80320byte なのは変わらず。これは普通に dat 保存した場合(384000バイト)に比べ 21% のサイズです。 圧縮時間は 5.2s ってことで、単純比較ソートに比べ 28% の時間ですむようになりました。効果覿面ですね。 伸張は変わらず 2.4s です。 otta さんとこも絵を描く方面からの反応はないっすね。 圧縮とか興味ないのかな??
0そうだね
プレイ済み
返信[13]
親投稿
otta777 otta777a
グラフィックデータの容量が大きくてプロジェクトを2つ分けないと ゲームがアップロードできないってお話を聞いたんでなんとか 出来ないかなっていうのが開発動機でした。そういう理由で 困ってる方が使ってくれればはいいかなぁと自分は思ってます。
0そうだね
プレイ済み
返信[14]
親投稿
やまな mintcats
一応絵を描く側として、画像の圧縮解凍ができる命令はありがたいと思ってますし、是非活用したいと思っています。 が、プログラムに詳しくないと、命令だけがあってもそれをうまく使うことができず、圧縮してくれる「ツール」や、プログラム内で解凍させる命令の「解説」がないと…というのが現状ではないでしょうか。 実はotta777さんが作られた命令を使って好きなファイルを読みこんで圧縮、解凍ができるものを試しに作ってみたのですが、圧縮と解凍はまだ別プログラムですし、それを公開してもそこから先は責任は持てないし…という感じです。 このツールがあれば、ゲームとはいかないでも誰でもCG集が作れます!みたいなのが作れれば、とは思うのですが。 圧縮すれば容量はもちろんのこと、公開するときにネタバレ的なものも防げて理想的だな、と感じています。 でもやっぱり難しいんですよね…。
0そうだね
プレイ済み
返信[15]
親投稿
MIKI ifconfig
ottaさん なるほど。 容量を減らすのが主目的なられいさんの PZSS がありますが、 使おうと思ったらコード読んで書く必要がありますからね~~~ 圧縮も伸張もけっこう遅いし。 そもそも 512x512 って圧縮できるのかしら???? 私のを試したら、標準スプライトは圧縮伸張できましたが、 標準 BG は out of memory 出ました。 SP は 77800 (GPR 比 15%) 圧縮 6.3s 伸張 3.3s と、相当優秀です。 ちなみに圧縮方式はやなぎさわ氏の PIC という形式をベースにしています。
0そうだね
プレイ済み
返信[16]
親投稿
MIKI ifconfig
やまなさん、貴重なご意見ありがとうございます。 使いにくいってことですね。 お絵かきツールも圧縮するプログラムもメモリを食うから、お絵かきに圧縮プログラムを組み込むのは難しいでしょうね。 なので、現状ではまず絵を描いて、後ほど圧縮するという二段階になると思います。 どういう方式が使いやすいですかね? (a) save "GRP0:ファイル名" で保存。圧縮ツールでファイルを選択して圧縮保存。512x512 固定になります。 (b) グラフィック画面に絵が表示された状態にする。圧縮ツールを起動し、範囲指定して圧縮保存。 つづく
0そうだね
プレイ済み
返信[17]
親投稿
MIKI ifconfig
(c) gsave 命令で配列に絵を読み込み save "dat:ファイル名" で配列を保存。圧縮ツールを起動し、ファイルとサイズを指定して圧縮保存。 (d) save_compressed_picture 開始x座標,開始y座標,幅,高さ,ファイル名 といった命令を使って、ユーザが好きなように圧縮保存。 (e) その他 見るほうは、このトピの扉で使っているソフトがあります。単純に一枚ずつめくる感じ。 ファイル構成は、(a)圧縮したファイルを全部くっつけた巨大なファイルと、(b)ビューア、の二本立てになります。 なんだったら圧縮画像にコメント入れられるようにして、そのコメント表示してもいいです。 伸張する命令は、 load_compressed_picture 開始x座標,開始y座標,ファイル名 みたいな感じがいいかな? あるいは gload 可能な配列を返す方法もあります。
0そうだね
プレイ済み
返信[18]
親投稿
otta777 otta777a
やまなさんにご指摘頂いて気が付きました。 解説…書いてなかったですね。 現状の仕様のもので解説を書いておいたので参考にして頂けると 幸いです。 中の処理を見直して再投稿する予定なので今のバージョンは 仮という事にして下さい。
0そうだね
プレイ済み
返信[19]
親投稿
MIKI ifconfig
メモリリークがあったらしく、プチコン再起動したら BG も圧縮できた。 ついでに lzss でもやってみた。 標準 BG 圧縮 | サイズ | GRP比 | 圧縮 | 伸張 lzss | 108984 | 20.8% | 54.36s | 5.22s pic改| 95812 | 18.3% | 6.32s | 3.52s 標準 SP 圧縮 | サイズ | GRP比 | 圧縮 | 伸張 lzss | 92060 | 17.6% | 90.63s | 5.14s pic改| 77800 | 7.4% | 6.23s | 3.24s
0そうだね
プレイ済み
返信[20]
親投稿
やまな mintcats
MIKIさん もしツールもつくっていただけるなら自分はbのタイプが良いかなと思います。 まげさんが作られたスプライトセッターというのがそういう感じの動きだと思います。 視覚的に範囲が選べるのはやはり楽です。 ビューアはコメントもつけられたら便利だし、そのままCGの配布とかに使えそうですね。自分だけで使うとしてもメモにできて良さそうです。
0そうだね
プレイ済み
返信[21]
親投稿
やまな mintcats
伸張する命令は…GLOADを確認してみましたが、MIKIさんの書いてくださったタイプの方がわかりやすいかな、と思います。 (データの形式とかそういうのを選ぶとまた難しい感じがするので) 圧縮した画像のファイル名と表示位置だけ入れたらプログラムの中で自分の絵が表示される、っていうとちょっと簡単になるかなーって思います。 こりんごさんの投稿作品みたいなまんがというか絵本というか、そういうのを容量をあまり気にせず簡単に作れたら、カコーぜとは違う方向にもお絵描き流行るかもしれませんね。
0そうだね
プレイ済み
返信[22]
親投稿
やまな mintcats
otta777さん 解説わざわざ追加していただいてありがとうございました。わかりやすかったです。 ロードした時にセーブしたときと同じ数値を選ばないといけないのは、確かにセーブした時の数字を忘れたら困りそうです…。 バージョンアップお待ちしてます。うまく使えるかはわかりませんが…(;´ェ`) 今回技術的なお話をされてるところに投稿するのはどうかなと思ったんですが、プログラム力が低いと便利なものも扱いきれない…ということが伝われば…と思います。 何がわからないかわからない事も多いので、いろいろとお聞きするとこもあると思いますがその時はよろしくおねがいします。
1そうだね
プレイ済み
返信[23]
親投稿
MIKI ifconfig
やまなさん、b タイプ了解です。 まげさんの作品は 8pixel にグリッドするようですが、絵の場合は特に 8 の倍数とか関係ないですよね?? ファイル名 + 座標指定でロード了解です。 >ビューアはコメントもつけられたら便利 見てるときにコメント追加ですか。 なるほど!! そういう発想はありませんでした。 >まんがというか絵本というか、そういうのを容量をあまり気にせず簡単に作れたら やまなさんの作品を見たいですね。別に私のツール使う使わない関係なく。 あのネコミミキャラかわいいです。 まさか小学生だったとは!!?!
0そうだね
プレイ済み
返信[24]
親投稿
やまな mintcats
MIKIさん 絵の場合はあまり8の倍数関係ないとおもいます。 スプライトにするならやはり8の倍数なのかと思いますが、スプライトのサイズもプログラム側で自由に決められましたよね…? コメント見られたら、ゲームの設定資料的なもの?を作ったりもできそうかなと。 小学生とか書いたやつは多分別のねこみみです。なんでそんなねこみみばっかりなのって感じですいません!! 作品は作ろうとしては詰まったりなんだりでぜんぜん完成しないので、もう人様に完全に教えてもらう前提で進めようかなと悩んでいます…。 調べる気がないのではなく、何を調べるのかわからないのです…。
0そうだね
プレイ済み
返信[25]
親投稿
MIKI ifconfig
やまなさん、やっとできました。 ファイル=MK_PIC key=4K2J2XWD 使い方 グラフィックを表示した状態で run してください。 スライドパッド:カーソル移動(+Rで高速) 十字キー:サイズ変更(+Rで高速) A:保存 B:中止 Y:読込み X:グラフィック面変更(grp0~grp5の繰り返し) L+X:上画面/下画面切り換え(xscreen 2か3じゃないとエラー停止) L:画像のみ表示
1そうだね
プレイ済み
返信[26]
親投稿
やまな mintcats
MIKIさん ありがとうございます!さっそく試しました。 イメージ通りの操作感です。下画面で操作できるのも、下画面サイズぴったりのものを描いた時に便利でいいと思います。 読み込みの方なんですけど、切り取った画像はどういう感じで表示されてるんでしょう? 切り取ったあとの絵を左上から表示してる訳ではないですよね。 小さめに作っても真中?に表示されて切り取った部分が全部確認できないのが気になりました。
0そうだね
プレイ済み
返信[27]
親投稿
やまな mintcats
あと、グラフィックを表示した状態、というがやり方がわからずで…(すいません)。 エディットモードや他の画像ツールで読みこんでから起動してみたんですがうまく行かず。 ダイレクトモードに任意の画像が表示されてる状態、ということではないのでしょうか…? (というわけでデフォルトのSPで確認しました) 読みこみも最初は切り取る画像の読みこみかな、と思って選んでエラーに…。解凍する画像データの読みこみ、なんですね。 この辺は両方読みこみがあったら親切かも、と思いました。 なんか要望ばっかりで申し訳ないです。
0そうだね
プレイ済み
返信[28]
親投稿
MIKI ifconfig
評価ありがとうございます。 > グラフィックを表示した状態、というがやり方 load"grp0:ファイル名" などで読み込んだ状態とか、他のツールで描いた状態とか要はどこかのグラフィック画面に何かが描かれていれば、X ボタン連打でどれかが表示されると思うので、それが対象になります。 >ダイレクトモードに任意の画像が表示されてる状態 その通りなんですが、うまくいきませんでした??? >切り取った画像はどういう感じで表示 Yボタンを押した時のカーソル左上の場所に読みます。読んでから位置決めの方がいいかな??? >両方読みこみ なるほど。圧縮形式じゃなければ grp としてロード、でいいですか?
0そうだね
プレイ済み
返信[29]
親投稿
やまな mintcats
MIKIさん そうです、ダイレクトモードで画像が見えてる状態でXボタンを押してもダメでした。 スマイルツールのランチャーから起動したんですけど、それがダメということはありますか? 切り取った画像の表示はカーソルを左上に持って行って読みこんだら全部表示されました、ありがとうございます。 今のままだと切り取るときに上画面より大きなものを切り取ることがないので、位置を決めるより全部左上からの表示でもいいかもしれないです。 画像は両方読みこめたら便利だと思います。ツールを起動させるだけで圧縮できるという感じになるので。 あとXでページを変えた時に、どのページなのかわかるように、ボタン説明の後ろくらいにページ数の表示もあればいいかなあ、と思いました。 自分の意見ばっかりで申し訳ないです。ほ、他の人の意見とか感想も聞きたい…!!
0そうだね
プレイ済み
返信[30]
親投稿
MIKI ifconfig
> スマイルツールのランチャーから起動したんですけど 確認したいので、ソフト名か key か教えていただけますか? > 位置を決めるより全部左上からの表示でもいいかも 了解です。 > Xでページを変えた時に、どのページなのかわかるように ですよね~~ > 自分の意見ばっかりで申し訳ないです。 いえ、こちらこそ貴重なご意見ありがとうございます。 ぼちぼち修正していきますね。
0そうだね
プレイ済み
返信[31]
親投稿
やまな mintcats
MIKIさん ランチャーはみむさんのものです。 ★mim.MENU - v1.0.3[ニンドリ公式ライブラリ] SKW4N2QV (/MIM-MENU) ご本人のプロフからコピペで。 これを使わせてもらってます。 確認よろしくお願いします。 あと、イラストを圧縮するなら8や16の縛りはなくても…みたいな話をしましたが、圧縮した画像をプログラムにいれる、という前提ならグリッドか8か16単位で動くモードがあると便利かな、とデフォのSPで触っていて思いました。 要望だけはどんどん出てくるので(すいません…)自分で付け足したり作れたら良いのですけども…。
0そうだね
プレイ済み
返信[32]
親投稿
MIKI ifconfig
確認しました。 ランチャー起動時と、登録プログラム起動時に acls しているので、ロードした画像は消えてしまいますね。ランチャー自身もたくさんグラフィック画面を使うので、acls しないようにしても絵は壊れてしまいます。 やはりこのツールないで grp ファイル読めるようにするのが正しい対処のような気がしてきました。 0,0 に読むのなら簡単に実装できます。 グリッド・・・前向きに検討します。
0そうだね
プレイ済み
返信[33]
親投稿
MIKI ifconfig
更新しました。 MK_PIC key=PB84DN4V ChangeLog - L+YでGRP読込み ((0,0)に) - Yで圧縮ファイル読込み ((0,0)に) - Xでページ変えた時のページ表示 (上画面と下画面独立に持つようにした) - 読込み時のファイルセレクタUI導入 以上です。お試しください。グリッドは後日。
0そうだね
プレイ済み
返信[34]
親投稿
MIKI ifconfig
更新しました。 MK_PIC key=4K2JA4Y3 ChangeLog - version 1.0 にした - L+R でグリッド on/off - fix: 上画面でカーソル全体が 320 より右にある時に下画面行くとエラー停止 - 保存した時に、ロードするためのコードを clipboard に入れるようにした。(ダイレクトモードで paste すればいきなり読めるww) - メニューが更に意味不明に・・・ - スマイルボタンから起動した時だけツールが動く仕掛けを仕込んだ(おちゃめさんの slot() 関数利用) 実行もできるライブラリって面白いな SPを読み書きするとなると、やはり任意の場所に読めた方がいいのだろうか??
0そうだね
プレイ済み
返信[35]
親投稿
やまな mintcats
更新お疲れ様です、ありがとうございます。 ランチャーからも正常に起動できました。 GRPも一覧から選択で読み込めるのですごく便利です。 ただグリッドが表示されない感じです。LR同時押しですよね?上画面でも下画面でも押して見たけどダメでした。 起動条件は前回とおなじです。 ダイレクトモードでペーストするのはやり方がよく分かりませんでした…。 SPの読み書きはどうでしょう…。まだ実戦に使ってないので自分はいまはなんとも…。 あとはこのツールを使ったかんたんなサンプル(ファイル名だけ書換えたら使えるような)を自分で作れればなー、と思ってますが、作れるかな…作れたらいいな…。
0そうだね
プレイ済み
返信[36]
親投稿
MIKI ifconfig
グリッドは移動とサイズ調整に効いて来ます。今どっちか判別するには動かすしかないという・・・ グリッドラインも必要ですか。うーーん。 一ページだけで完結させたいので、他のページ(SP,BG)は使いたくないんですよね・・・ カーソルと同じ手法でできないこともないけど、カーソルと競合しそうだなあ・・・ pasteは保存して戻った後、ダイレクトモードでおもむろに[paste]ボタンタッチで、べろっと一行貼り付けされませんか?? そのまま enter で、画像が 0,0 に読み込まれるはずですが。 エディットモードで貼り付ければ、他のプログラムで使えます。ただし、そのプログラム末尾にこのツール全体をコピペしてあること。
0そうだね
プレイ済み
返信[37]
親投稿
MIKI ifconfig
>このツールを使ったかんたんなサンプル 絵本のように一枚ずつめくるタイプならば可能です。てか扉絵のビューアがそのもので、公開したファイルにも含まれています。 圧縮ファイルを順番にまとめて一本のファイルにして、そのファイル名を指定すると絵本になるという感じです。
0そうだね
プレイ済み