【TIPS】JPEGデータのサムネイル作成はもっと早くなる!? ワーク領域の節約にもなるぞ

このページをDeliciousに追加 このページをはてなブックマークに追加 このページをYahoo!ブックマークに追加

2001年12月28日(金)版

【TIPS】JPEGデータのサムネイル作成はもっと早くなる!? ワーク領域の節約にもなるぞ

ソフコン 3rd Edition "l'agenda" 開発応援


■ はじめに

 以前『WindowsCE プログラミング Tips』で、6回にわたりIndependent JPEG Group(IJPG)が配布しているJPEGライブラリの活用方法を紹介した。まだまだツカエル機能が実装されている事がわかったのでご紹介しよう。

■お断り

このTIPSの内容はIndependent JPEG Groupが配布するIndependent JPEG Groupの成果であるIndependent JPEG Group's JPEG SoftwareのWindowsCE上における使用方法を紹介するものです。

■ 最近のデジカメは画像サイズがでかくて・・・・

 最近のデジカメはセンサーの画像ピクセル数が増えたために、縦横とも1000ピクセルを越えるJPEG画像ファイルを扱うことも少なくない。大サイズの画像解凍や縮小にはそれだけ処理時間もかかるし、場合によってはメモリも多く必要とする。しかしモバイル機種であるCASIO l'agenda BE-500や他のWindowsCE 機種ではなるべくワーク領域を節約したり、速度を稼いだりして、サクサク動作感をだしたいところだ。

■ でかいサイズのJPEGファイルは小サイズで解凍しよう

 IJPGのJPEGライブラリはあらかじめ、大サイズの画像を縦横1/2,1/4、1/8で解凍するための仕掛けが組み込まれている。この機能を使っている人はそれほど多くはない。もともとIJPGのJPEGライブラリは1ラインずつでも解凍画像を取得できるように工夫されているのだが、この機能を使えば希望するサイズの縮小画像を更に効率良く取得できる。
 1/2,1/4、1/8という縮小率がサポートされている理由だが、JPEG圧縮では8ピクセルx8ピクセルの単位タイル画像をDCTにより圧縮しているからだ。ライブラリ内部の実際の解凍も8ピクセルx8ピクセルごとに得られているわけだ。1/2,1/4、1/8縮小解凍機能は、この特徴を最大限に生かしているわけだ。

■ パラメータを指定するだけ

 さてその方法なのだが、パラメータを2つ指定するだけでよい。さらに解凍演算精度として高速整数演算を指定してやれば更に快適になる。サムネイル画像ならばこれでも精度は十分だ。

 以下、ソースコードはキモの部分のみ掲載しているので、はじめてJPEGライブラリを使う方は以前の『WindowsCE プログラミング Tips』を参考にして下さい。


     ......
     struct jpeg_decompress_struct dinfo;
     ......
     jpeg_stdio_src( &dinfo, fp );
     jpeg_read_header(&dinfo, TRUE );
     ......
     dinfo.dct_method = (J_DCT_METHOD)JDCT_IFAST;
     dinfo.scale_num = 1;
     dinfo.scale_denom = 2または4または8を指定; 

     ......
     jpeg_start_decompress(&dinfo);
     width = dinfo.output_width; //縮小済みのサイズが得られる
     height = dinfo.output_height;



【TIPS】JPEGデータのサムネイル作成はもっと早くなる!? ワーク領域の節約にもなるぞ

Reported by かっぴー


Last-modified: Sun, 24 May 2009 23:45:30 JST (3105d)