dcrawを使ってみる
dcrawはバイナリ(exeなど)やフロントエンド込み(UFRaw)などで配布されていますが、それらは常に最新版とは限りません。というか一年前だったりするので最新製品には対応していません。やはりdcraw.cが更新されたら(もしくはdcraw.cの更新より早く)すぐに使えるようにしたいということで、dcrawをコンパイルしてみました。
ビルド環境の構築(Windows)
おそらくLinuxでは簡単だと思われるので、Windowsでのビルド環境のメモ。
- MinGW+MSYSをインストール。
- LCMSのソースをダウンロードし、MSYSでコンパイル。./configure --prefix=mingw & make & make install
- MinGWのincludeディレクトリにlcms.hがあること確認。
dcrawのコンパイル
- コマンドプロンプト(MSYSじゃない!)で gcc -DWIN32 -DDJGPP -o dcraw -O4 dcraw.c -lm -llcms -lws2_32
で、やってみた。
現状では、「開く」ダイアログでPEFファイルを選んで、それを画面上に等倍表示するだけのアプリです。一応内容が表示されてますね。前回のエントリーで書いたTODOの2番までいった感じです。
ただ、3番に行く前に、大きな問題が…。
課題
これ、表示するまでに10秒近くかかるんです。dcrawの処理そのものが遅いのか、別プロセスのdcraw.exeに渡してるので単純にオーバーヘッドがかかっているのか。dcrawがテンポラリファイルを作った後さらに目的地までコピーしているような気がするので、それをやめさせてこちらからテンポラリファイルを直読みしに行くようにすればちょっとは早いかもしれません。そもそも一旦ファイル化するのはあまりメリットはないのでメモリ上でやるのがベスト。それにはdcrawをライブラリ化しなければなりません。とにかくdcraw.cをもっと読んでみることにします。
それから、現像後のデータはdcrawからは48Bitで出してるんですが、表示時には24Bitで表示しています。パソコンの色自体が24Bitなのでそれはそれで良いんですが、この時にどう間引くべきなのか。現状ではQtのaddPixmapで24Bit化しているつもりなんですが、もしかするとOpenCVのcvLoadImageの時点ですでに24Bit化されちゃってる恐れもあって、この辺はまだ調べる必要があります。いずれにしても現状では暗く表示されてしまって問題なので、描画のロジックは見直す必要があります。