2011年11月5日土曜日

FreeImage

・・・というわけで、前回、
System.Drawing.BitmapはJPEGの画質が悪すぎる
ということが判明したので、
その代わりに使えそうなものを探してみたわけです。

まず、最初に見つけたのが

「libjpeg」(IJG JPEGライブラリ)
公式サイト http://www.ijg.org/

が、調べてみると、どうも、
・Cで書かれたソースコードで配布されている。
・プログラムに直接ソースコードを組み込んで使うのが、もっぱらの利用法。
・DLLにできなくもないが、なかなかに面倒らしい。
・誰かDLL作ってバイナリ公開してないかな-、と思ったが見つからない。
・そんなこんなで、.NETで利用するのも難しそう。
というわけで、ひとまず諦める。

そして見つけた第2候補。

「FreeImage」
公式サイト http://freeimage.sourceforge.net/

・オープンソースなライブラリ。
・PNG, BMP, JPEG, TIFF, など、いろんなフォーマットに対応している。
・Windows, Linux, Mac OS X などの各OSに対応。32bit、64bit両方に対応。
・C, C++, VB, C#, Delphi, Java, Perl, Python, PHP, TCL, Ruby, と対応言語はよりどりみどり。
・使い方が簡単(らしい)。
・C#でのFreeImageの使い方とかを説明してくれているような日本語のサイトをgoogle先生は知らないようだ。(英語でもほとんど無いっぽい。)

.NETから使えそうなので、
とりあえずいじってみよう、ということでダウンロード。

で、結論から言うと、
これはなかなか良さそうです。
使い勝手も良いし、機能も豊富です。
ちゃんとJPEGを本来の画質で読み込めるし、
読み込んだ画像をSystem.Drawing.Bitmapのインスタンスとして取得したり、
逆にSystem.Drawing.BitmapのインスタンスをFreeImageのAPIで
いろんなフォーマットでファイルに書き出したりもできる。

以下、ダウンロードしたFreeImageの使い方など。

ダウンロードしたのは
"FreeImage3151Win32.zip" というファイル。
解凍されたファイルの中には、
"Wrapper\FreeImage.NET\cs\"フォルダ内にVisualStudio2005のソリューションファイルが。
これをVisualStudio2010で開くとプロジェクトの変換が行われるが、特に問題なく変換される。

が、ビルドしようとするとうまくいかないので、多少設定をいじる必要有り。

まず、"Library.2005"というプロジェクトのプロパティを開き、
「ビルド」タブの「警告をエラーとして扱う」という項目で「すべて」が選択されているので、
それを「なし」に変更。

同じく、"Library.2005"プロジェクトに、ソリューションエクスプローラーでコンテキストメニューから
「追加」 - 「既存の項目」で、
解凍されたFreeImageのフォルダに入っている
"FreeImage\Dist\FreeImage.dll"を追加。
これがネイティブなFreeImageのライブラリ。
(で、今ビルドしようとしているのが、このDLLのラッパー。)

最後に、ソリューションに"UnitTest.2005"というプロジェクトが含まれているので、それをソリューションから削除。

これでビルドができるはず。
サンプルがたくさん入っているので、
それを見れば、必要そうな使い方も一通りわかるはず。
シンプルなAPIになっていて、割と簡単そうです。


今回は、このあたりで。
日本語の情報が少ないようなので、
そのうち、まとめ直したりしてHPのほうにUPしておこうと思います。