/*========================================================================*/ /* ┏┯━━━━━━━━┯━━━━━━━━━━━━━━━┓ */ /* ┠┴────────┴───────────────┨ */ /* ┃ 『 LZ-R 』Version 1.00 ┣━━━━━┓ */ /* ┏┯┫ 非LZW理論によるGIFデコードPlug-in for Susie ┠─────┨ */ /* ┠┴┨ --- 説明書&注意事項 --- ┃ DJ☆Uchi ┃ */ /* ┃ ┗━━━━━━━━━━━━━━┳━━━━━━━━━━┛2000/10/10┃ */ /* ┃ Copyright(C)2000-2000 H.Uchida ┗━━━━┳━━━━━━━━━━━┛ */ /* ┗━━━━━━━━━━━━━━━━━━━━━┛ */ /*========================================================= readme.txt ===*/ 【 作品名称 】 『 LZ-R 』Version 1.00 【 登録名 】 LZR100.LZH 【 著作権者 】 DJ☆Uchi [PEB04756@nifty.com] 【 動作確認 】 FM-TOWNS HB2 (CPU:AMD K6-III,Memory:104Mbytes) Windows95 + VIX 1.53 【 対応機種 】 Windows95/98/Me/NT4.0/2000 が動作する機種 (FM-TOWNS/FM-R/PC-98x1を含む) 【 動作条件 】 Win32システム上のSusieプラグインが利用できる環境。 【ソフトウェア種別】 フリーソフトウェア GIFデコーダ 【 使用条件 】 著作権は、これを放棄しない。 個人による改変は、これを許可する。 【 転載条件 】 転載厳禁! 改変後の再配布も禁止。 /*========================================================================*/ 【 概要 】 米UNiSYS社のLZW関連特許に抵触せずに、GIF画像を展開するプラグインです。 Susie及びSusieプラグインに対応したプログラムで使用することができます。 【 ファイル内容 】 LZR100.LZH アーカイブ + LZR.spi プラグイン本体 + ReadMe.txt このファイル + Gif.htm 理論解説書 + 理論解説書の画像データ + ソースファイル一式(VC++6.0用) + ソースファイル差分(別の実装例) 【 使用方法 】 通常のプラグインと同じです。 使用するプログラムのマニュアルを参考にして下さい。 【 使用上の注意! 】 このソフトウェアでは米ユニシス社の特許に抵触しない方法でGIFの展開を行います ので、ライセンス料徴収の対象にはならないと思われます。 ですが、万が一問題が発生した場合は公開停止措置等を取りますので、その際は直ち に利用を停止していただくようお願いします。 また、このソフトウェアを利用することによって生じるあらゆる不利益に対して、 作者は何ら責任を負わないこととします。あらかじめご了承下さい。 ※日本国外での利用は、此を禁止します。 【 ソフトウェア仕様 】 ○GIF87aおよびGIF89aに準拠した画像ファイルが展開できます。 ○UNiSYS社の特許に抵触しない、新しい展開方式を採用。 ○Susie Plug-in(00IN)形式。 ○2,4,8色GIFは16色にアップサンプリングされます。 ○32,64,128色GIFは256色にアップサンプリングされます。 ○非圧縮GIFに対応。 ○RLE形式GIFには対応していません。(存在自体未確認) ○アニメーションGIFでは、最初の一枚目の画像のみ表示します。 ○少々遅いです。 【 非LZW理論について 】 ご存じの様に、GIFの圧縮・展開にはLZWというアルゴリズムが利用されています。 また、このアルゴリズムの基本的な部分は米ユニシス社が特許としてその権利を所持 しています。 現在、米ユニシス社がGIFを利用したソフトウェアに対してライセンス料を徴収してい るのは、GIFを利用する際にLZWが避けて通れないと考えられていたからであり、実際 問題としてLZW以外の理論でGIFを利用するソフトウェアなど一部(※)を除いて考え られなかった為でもあります。 ※RLE圧縮などの非互換GIFや非圧縮GIFのみを扱うソフトウェア。 そこで、該当する特許(JP特許2610084。米国US4464650は調査中)を調査してみ た所、この特許に抵触する事無くLZW圧縮されたデータを展開する事が可能であること が分かった為、その理論をWeb上にて発表(2000/04/01)しました。 詳細は添付の[Gif.htm]を参照していただくとして、簡単に説明しますと・・・ LZWではデータを展開する際に辞書テーブルというものを利用します。 そして、今から展開しようとする圧縮データの値がそのままテーブルの番号になって いますので、テーブルから値を次々に取り出せば展開が出来ます。 さらに、ここがLZWの特徴なのですが、一つデータを取り出す度にテーブルにデータを 一個だけ追加していきます。 ここで、私が考えた特許回避手段は”辞書テーブルを使わない”という方法です。 圧縮データが在って、他にはテーブルも何も要りません。 デコーダに圧縮されたデータを与えると、そのまんまダイレクトに展開データが出て 来るという愉快な仕様になっています。 入力と出力結果が同じと言うだけで、内部動作が決定的かつ根本的に異なります ので、特許回避という意味ではかなり強烈です。 そんな訳で、今回はそのアルゴリズムに基づいたGIFデコーダをSusieプラグイン という形で具現化してみることにしました。 この先どうなるのかは分かりませんが、昨今のGIF問題に一石を投じる事にでもなれば 幸いです。 【 ソースファイルについて 】 ソフトウェアの性格上、アルゴリズムを証明する必要がある為、ソースファイルを 添付してあります。Microsoft Visual C++ 6.0 専用ですが、プラグイン作成の参考に なるかも?しれません。 私は基本的にソース付きで公開するという方針を取っており、今回もそれに従って いるのですが、Windowsのプログラムを作るのは今回が初めて(しかもCは殆ど使った ことが無い)という事もあって、正直あまり人様にお見せできるような内容ではあり ません。相当におかしな部分も多々在る事とは思いますが、なにとぞご容赦下さい。 そのソースについて補足しますと、今回ソースファイルは2種類添付しています。 一つはそのままディレクトリに入っているもの(以下、Fast版)ですが、 もう一つはディレクトリの中に入っています(以下、Pure版)。 この2つの違いですが、GIF展開ルーチンの実装に若干の差があります。 前述のように私の展開理論においては、入力データから出力データを得るまでの間に 余計なメモリを一切消費しないという特徴があります。 要するに辞書テーブルに相当する部分が無いわけです。 ですが、実際にGIFの展開を行おうとすると一つだけ問題が発生してしまいます。 私の理論ではGIFの圧縮データを何度もアクセスしなければならず、それも先頭から 順に読むのではなく、任意の位置の圧縮コードを任意のタイミングで取り出す必要が あるのです。 ご存じのようにGIFでは圧縮コードが可変ビット長になっていまして、しかもギチギチ に詰め込まれています。 その中から任意の圧縮コードを取り出すのは至難の業(不可能ではない)です。 という訳で、Fast版においては一定量の圧縮コードを取り出して16ビット固定長の 配列に溜め込み、それをまとめて展開するという手法を取っています。 こうすることで、かなりマトモな速度で動くようになっていますが、この配列を ”辞書テーブルと同じ”と見なされては困りますし、余計なメモリは要らない事を 証明する為に、配列を使用せず、元データから任意の圧縮コードを取り出してそのま ま直に展開してしまう理論通りのPure版も作成しました。 速度的には、Fast版の100倍以上遅く(P3-1GHzで640*480の画像を展開するのに最悪で 3分)、とても実用にはなりませんが、理論証明程度にはなるかもしれません。 ちなみに今回添付したバイナリはFast版をコンパイルしたものです。 【 GIFについて 】 The Graphics Interchange Format(c) is the Copyright property of CompuServe Incorporated. GIF(sm) is a Service Mark property of CompuServe Incorporated. 【 独り言・・・ 】 SusieプラグインでアニメーションGIFするにはどうしたら良いんでしょうか? 00IM形式、なんて無いですよね。 それにしても、ヤバ・・・。 【 更新履歴 】 version 0.0 ・・・ [2000/04/01] 理論完。 version 1.0 ・・・ [2000/10/10] 初版公開。 /*========================================================================*/