マイコン工作実験日記

Microcontroller を用いての工作、実験記録

JPEGの伸長、表示

2009-07-19 00:02:02 | ARM9
CMOSカメラで撮影した画像をJPEG圧縮できたので、次の実験は当然ながらその伸長です。今回はファイルから読みだして、伸長しながら表示してみることにしました。libjpegはもともとstdioを使って開いたファイルから画像を読み出すためのモジュールとして jpeg_stdio_src()が用意されていますので、こいつをチョットいじってFatFsのAPI に変更してやればいいだけのことでした。

元画像は先週圧縮したものでVGA(640X480)サイズです。LCDのサイズはQVGAですので縦横を半分にしてやる必要があります。幸いなことにlibjpegでは伸長の際のパラメータとして縮小率を 1/1, 1/2, 1/4 または1/8のいずれかを指定できるようになっていますので、この機能を使って1/2に縮小し、スキャンライン毎にLCDに表示してやります。



例によってISLOWとIFASTの両方を試してみましたが、圧縮の時ほどの差異はみられません。処理時間は圧縮の時と比べて短いですが、縮小しているために画素数が少なくなっているのも影響しているのでしょう。

わたしはいつもブログで使う写真はVGAサイズで撮っていますので、これらのファイルも表示できるはずです。試しにこの画像ファイルで実験してみると。。



おやおや、ずいぶんと時間がかかるようになりました。デジカメで撮ったJPEGファイルとの大きな違いはファイルのサイズです。自分で撮影、圧縮する際にはqualityを85に設定していたので、PIC001.JPGのファイルサイズは44KBほどです。それに対してデジカメで撮影したPIC002.JPGでは200KB近い大きさになっています。当然、quality=100に相当するファイルになっているのでしょう。この違いが、処理時間の違いとして現われてきているようです。

と、ここまで書いてlibjpegがバージョンアップされていることに気が付きました。ショック! 現在の作業は5月にダウンロードした Version 6bに基づいています。98年にリリースされていらい更新されていないすっかり枯れたコードだと思っていたのですが、先月11年ぶりにVersion 7が出ているようです(驚き)。このバージョンでは N/8 (1<=N<=16)のスケーリングができるようですので、こっちの方が便利かも。