「長いものには巻かれろ」 という処世訓は好きではない。 しかし、結論から言って、 今度ばかりは巻かれてしまおう。 (他にうまいテがないし…) . . . 本文を読む
あ~見つけてしまった!つぶしきったと思っていたのだが、探して見るとあるもんだ。ほぼ問題に遭遇する人はいないだろうし、遭遇しても問題に気付くこともまず無いだろうが気色悪いので直しておこう。問題は量子化係数を指定Q値でスケーリングする部分にあった。 . . . 本文を読む
前回のVB.netプログラムでdll処理時間をdllのビルド条件を変えて計測した。 dllのビルドオプション条件は * Debugビルド * Releaseビルドで最適化オプション無し * Releaseビルドで最大の最適化指定 の3条件で比較した。 . . . 本文を読む
ビルドして出来上がったJpeg保存dllをVB.netから呼び出して使ってみる。 プログラムの半分位は以前の自力Tiff保存プログラムを流用して、 ついでにdllの処理時間を計測する機能を付け加えてみた。 . . . 本文を読む
前回までに作ったファンクションやルックアップテーブルを全て並べると ソースファイルは以下のようになっているはずだ。 (…とは言っても、全部丸々書くと1300行位になって長すぎるので 細かい部分は省略させてもらう) . . . 本文を読む
ここまでで必要なサブファンクションは全て完成したので これらをプロトタイプ宣言して、 全体をコントロールするルートファンクションを作れば 4:4:4 Jpeg保存dllは完成する。 (実際にはサブのバグ取りをしながらチマチマ組んでたんだけどね) . . . 本文を読む
前回確認した処理フローに従ってハフマン変換をコーディングしよう。 ファンクションはルックアップテーブル(LUT)から変換コードを取り出して 32bitバッファに詰め込む部分と、 32bitバッファ内のデータの有効ビットが8ビットを超えた時に 上位から8ビットずつ取り出してデータ保存用のバイト配列に写す部分に分け、 2つのファンクションで構成することにした。 . . . 本文を読む
前回ハフマン変換のざっくりフローを述べたが ややこしくてコトバだけではイメージがイマイチだ。 そこで、具体例のフローを図示してアタマを整理しよう。 (ややこしい処理ではコレをやらずにコーディングすると 大抵バグるのがワタシの常であるっ!) . . . 本文を読む
量子化処理後のデータをハフマン変換するための ルックアップテーブルができたので、 コレを使って実際に変換を行う処理を作るのだが、 ここでざっくりとハフマン変換フローの方針を述べる。 . . . 本文を読む
お次はハフマンコードを探すLUTで、 同様に可変ビット長データを左寄せ16bitにして16進表現したファイルと 取り出すbit数を記述したファイルを Jpegヘッダの雛形を作成した時に確保しておいた DC用とAC用のDHTのデータファイルを利用して作る。 . . . 本文を読む