« 各種拡大縮小フィルタの実行速度 | メイン | C++ Builder XE6 で FireMonkey を使わず NDK の機能で作る »

2014年05月23日

吉里吉里Z 開発:: JPEG XR の読み込みに対応

    

JPEG XR の読み込みに対応し、dev_jpegxr ブランチに入れた。
対応したバイナリはスナップショットに入れた。
現在のところ 32bppPBGRA と 24bppRGB のどちらかのみに対応。
グレースケールや HDRI 、 Motion JPEG XR などには対応していない。
jxrlib のフォーマットコンバーターはどうもおかしかったり、メモリリークしていたりと完成度があんまり高くない印象 ( jxrlib のメモリリークは直した ) 。
Windows なら OS 組み込みの機能を使ってもいいが、汎用性や問題を追いやすいなどの理由で jxrlib を使っている。
SIMD 対応して高速化なども考えられるし。

JPEG XR は、post JPEG を狙って作られたフォーマットの一つ。
他に JPEG 2000、WebP がある。
記憶では JPEG 2000 が一番古いはずだが、処理負荷が高いせいか全然普及していない。
と言うか、全部普及していない。

JPEG XR の持つ機能として以下のものがある。

・アルファチャンネル対応
・HDRI 対応
・Motion JPEG XR 対応 (アルファチャンネル付き動画に使える)

JPEG XR は Vista 以降なら標準で扱えるようになっていて、エクスプローラで JPEG などと同じようにサムネイルが見られ、ビューアで開けるなど、利便性が高い。

4:4:4 形式も選択できるので、JPEG など非可逆圧縮で目立ちやすい赤と青の劣化が目立ちづらくなっている ( 4:2:0 形式ではすぐに劣化に気づく部分 ) 。
ブロックノイズも発生しづらい仕組みになっているようで、高圧縮にしてもブロックノイズは見えない。
圧縮アルゴリズム的に 2DCG に適しているように見える。

圧縮率は 0~1 で指定する。
0.95 では、PNG に比べると 1/2 くらいのサイズになるが劣化しているのは気付かない ( サイズの減り具合は画像の種類による )。
0.8 で 1/4 くらいで、この辺りまでは劣化を感じられない。
これ未満だと劣化を感じられるようになってくる。
ただ、スマフォ等高繊細ディスプレイで見ると、ブロックノイズがないので高圧縮にしても綺麗に見える。
0.2 などで圧縮するとモスキートノイズがはっきりとわかるが、高繊細ディスプレイで見ると気にならない。

アルファチャンネルがある場合、アルファチャンネルをロスレスにするとあまり小さくならないので、少しは圧縮率を上げる必要がある様子。
0~255 ( 0 がロスレス ) の間で指定できるようになっているが、30 辺りが限度。


JPEG XR を使えば 0.8 なら 1/4 程度になるのでかなりパッケージサイズを削れそう。
Opus で音声は 1/2 以下に出来るようになったのと合わせて、組み合わせると今までの半分以下のサイズに出来ると思う。
後は、Windows 7 以降で使える H.264 対応と xp3 の LZMA 対応が加われば、各種データの圧縮方式が少し新しい世代になって、サイズは大きく縮む。



投稿者 Takenori : 2014年05月23日 10:41




comments powered by Disqus
Total : Today : Yesterday : なかのひと