2022年5月27日投稿 / 2022年6月10日更新 / 投稿者 : あまさとしおん(天郷思音) / タグ : 投稿プログラム 実用ツール ライブラリ 圧縮
検索用:【天郷思音】
展開の速さと圧縮率のバランスが特徴の画像圧縮ライブラリです。
ピクセルあたり約1~4bit(多くの場合は2.5~3.5bit)
(写真など極端に色数が多い画像は、これより大きくなります)
SYS/DEFSP.GRPの切り抜き(512×128)を保存した場合、配列サイズは26,328バイト
ピクセルあたり約3.22bit、配列からの読み込み時間は約244ミリ秒です。
スロット0で実行すると自動的に動作確認モードになります。
ライブラリとして使う場合はスロット1~3にEXECしてください。
コピペして使う場合はプログラム中の
'*** コピーしてつかうとき ここから ***
'*** コピーしてつかうとき ここまで ***
の範囲だけコピーしてください。
命令の使い方は下記の通りです。
初期化時にCLSが実行されるので、プログラムの初期化段階で使うことを推奨します。
- EXEC ”PRGx:SRDLIB.PRG”
(xは1~3のスロット番号)
- SRDSAVEFILE x,y,w,h,”DAT:filename”
- ’↓処理時間を気にする場合
- SRDSAVEFILEQ x,y,w,h,”DAT:filename”
(xは始点X座標、yは始点Y座標、wは幅、hは高さ)
セーブは複数の圧縮パターンを試して一番圧縮できたものを保存します。
処理時間を気にする場合はSRDSAVEFILEQ命令を使ってください。
(比較を省略し固定形式*1で保存します。圧縮率が少し悪くなる場合があります。)
- SRDLOADFILE x,y,”DAT:filename”
- ’↓簡易コンペア機能を使う場合
- SRDLOADFILECS x,y,”DAT:filename”
(xは始点X座標、yは始点Y座標)
SRDLOADFILECS命令は、読み込んだ画像のチェックサムが一致しないとき、ダイアログでエラーを表示します。
チェックサムは追加圧縮済みのデータにのみ含まれます。
(SAVEFILEQ命令や頻度圧縮オプションありでセーブしたデータは確認できません)
- SRDMORECOMP #TRUE
このコマンドは廃止されました。
バージョン間の後方互換は作品ページを作成した日から考慮していますので、5/27までの古いバージョンで保存したデータは最新バージョンで読み込みが可能です。
投稿ページを作成。 18:40更新 ver36(2:6)モードを追加 ver50を34に変更(50でも読み込み互換性あり)
昔作った連長圧縮のSRI形式を発展させ、辞書式圧縮を加えた物です。
圧縮データの先頭から2要素目(添字が1の要素)の最上位バイトの値をバージョンと呼び、圧縮の種類を表します。
モードx:yのxとyを足すといずれも8になることから分かるように、8bitを按分して連続数と辞書インデックスに割り当てます。
プチコンの整数型変数は32bitなので、配列の各要素にこの塊を4個ずつ詰め込んでいくことができます。
各モードの詳しい意味は後述。
原始的なアルゴリズムで、実用的ではないと思われるかもしれませんが
データが連続しない時に肥大する欠点を小さくする工夫をして実装しています。
具体的には、色の連続数を可変長のビット列に分割して記録します。
連続数を表すビット列の単位はモードによって異なり
例えば、同じ色が210個連続する場合
といったように記録します。
これにより、色が連続しない時のデータ量を小さくすることができます。
一意のパレットを作るほしけんさんのGPKライブラリ(Toukou/GPKライブラリ)などとは異なり、直近の指定色数以内にある場合のみ参照を行い、そうでない場合は新たに辞書に登録します。(相対辞書方式?)
一般に、辞書式圧縮では「一致位置」と「一致長」というパラメータを用いる場合が多いですが、SRDフォーマットでは一致長を
で固定し、一致位置のみを記録しています。
辞書式圧縮というよりもパレット方式に近い概念です。
辞書の範囲はモードによって異なり
さらに「一度圧縮した配列を再び辞書式圧縮に掛ける」(以下、追加圧縮)という処理を実行します。
追加圧縮にもモード(辞書の範囲)の違いが存在します。
追加圧縮の辞書の範囲は
※ちなみに「分割」は配列変数の1要素(32bit)を何個に分けて使うか、という意味
基本圧縮と追加圧縮の組み合わせは下記の6通り存在し
基本圧縮2:6モード 追加圧縮4分割モード | 基本圧縮3:5モード 追加圧縮4分割モード | 基本圧縮4:4モード 追加圧縮4分割モード |
基本圧縮2:6モード 追加圧縮8分割モード | 基本圧縮3:5モード 追加圧縮8分割モード | 基本圧縮4:4モード 追加圧縮8分割モード |
SRDSAVEFILE命令・SRDSAVEDAT命令では、この中からもっとも成績が良かったものを保存します。
特定のデータの長さで誤動作する問題を抱え、圧縮率が処理時間に見合わないことも考慮し、この機能は廃止しました。
互換のため、読み込みのみ対応します。
追加圧縮済みデータをバイト単位に分割、バイトごとの値の出現ランキングを作成します。
このランキングで上位32位までに入った値を6bitの符号に置き換え、それ以外の224個の値を9bitの符号に置き換えます。
上位の値が十分に多い場合、データが小さくなります。
(実際の効果は5~10%程度)
あまりにも展開処理に時間がかかるという欠点があるため、オプションのSRDMORECOMPを有効にした場合のみ機能します。
(頻度圧縮をしない場合に比べ、2倍以上の時間がかかる)
連長圧縮と辞書式圧縮を組み合わせるアイデアは、最近コンピュータ向けに発案されたQOIフォーマットという形式の影響も受けています。
しかし、プチコン3号は16bitの色コードという特殊な仕様であることからQOIフォーマットを規格通りに実装するには不向きなこと、すでに連長圧縮を用いたSRIフォーマットを自作していたことから、その発展形として新しい規格を作ることにしました。
なし
プチコン3号用の公開キーです。トップメニューの「作品公開とダウンロード」から公開キーを入力すると、作品をダウンロードすることができます。
約9キロバイト(単独のファイルサイズ)
この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)
*1
基本圧縮3:5モード、追加圧縮なし
*2
具体的には1.5倍
表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.159 秒 | このページの最終更新 : 2022/09/20 (火) 12:48:46 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30