スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

GIFエンコーダ再び

どもです。年末ってことでいつも以上に忙しくなっています。
これこそが忙しいということなのか、単純に時間の使い方が悪いのかわかりませんが、
いろいろなことの締め切りが迫ってきてあたふたしております。


卒研もいつのまにやら共同研究(2名でひとつのテーマを研究)になっており、
しかもどういうわけか研究の方は全部オマエがやれ!と先生から言われてしまい、
卒研Extraモードが始まってしまいました。プログラムがメインといってもいいテーマなので、作成自体は日頃iアプリを作っていたおかげかサクサク進むものの、やっていることの意味(科学的な何か)をなかなか理解できず四苦八苦中。
院にいくのならむしろプログラムよりもそっちの方が大事なんだし、今の内に理解できるようになりたいところ。


で、タイトルに書きましたがGIFエンコーダーをまた作ってみました。
研究テーマ中に必要かもしれない!っていうこじつけで。。。(圧縮!アニメーション!などなど)

思えばあれをつくったのももう1年以上前。(これ
完成はしたものの圧縮速度が遅くあんまり使えないものになってたと思います。
しかしそれも半年前にHDDのデータクラッシュでデコーダ部を残して他消失。以後めんどくさくて触れてませんでした。


以前のはiアプリ用ってことでjavaで書きましたが今回はC++。
ネットと以前のデコーダのソースを見ながらいろいろ思い出つつ制作。
やはり一度つくったものであると詰まるポイント(でどう対処すればいいか覚えているもので
さっくり一日でできました。(アニメーションGIF作成機能付き)

以前のはクラスを増やしたくないっていう今思えばあんまりよろしくない選択で辞書テーブルの作成方法がいちいちバイト列全部をちまちま比較していくというまったくもって非効率なものになっていましたが、今回はLZW圧縮の解説でよくみるようなツリー構造の辞書テーブルを作成させることで大幅に速度が改善されました。

ピクセルデータから1バイト読むごとにツリーを1段階たどるという流れ。
ツリーの末端に達したら要素を追加しデータを出力。追加された1バイト値が根にあるツリーに移動し、再び1バイト読み込み1段階たどるということを繰り返すのみです。

以前の方式に比べると体感で10倍くらいの改善がされてますが、他ツールでgif化したときよりも圧縮率が悪いのが気になる。(gifは256色において可逆圧縮であるが圧縮率改善のために人間の目にはわからない程度に数10色減色するツールもある模様。これだと非可逆圧縮。)
辞書テーブルのリセットタイミングなんかの調整とかで圧縮率改善できないかなぁ。

コメントの投稿

非公開コメント

Go To 物置。
プロフィール

書いてる人:つん

まったりのんびり。書いてる人の息抜きブログです。

多分連絡先↓
metal_tsun@yahoo.co.jp

カテゴリー
リンク
月別アーカイブ
バロメーター
Java歴:2005年2月から今まで。
3DCG歴:2005年8月から数年。
C歴:2006年4月から今まで。
VB歴:2007年3月からちょっと。
Delphi歴:2007年3月からちょっと。
PIC歴:2007年5月から数年。
イラスト歴:2007年12月から今まで。
DTM歴2008年2月からちょっと。
PHP歴2008年4月からちょっと。
C++歴2008年4月から今まで。
C#歴2009年1月から今まで。
Objective-C歴2009年4月から今まで。
CSS歴2012年5月から今まで。

ブログ開始日2005/10/11


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。