6.4 【progressiveとI/O suspension】 プログレッシブJPEGでうまく書き出せないことに関して。ちょっと調べてみたところ、ファイルのサイズが書き出し用のバッファのサイズを超えたあたりでアプリケーションが終了してしまっていることがわかった。小さめのファイルで試してみると、書きだしまで正常に行われていた。 おそらくどこかでエラーが起こってそこで終了してしまっているのだろうと思うが、エラーハンドリングを一際していないので原因がわからない(苦笑)。試しにデバッガで追ってみたが、jpeg_finish_compress()を呼んだところで終了してしまっていてエラー番号が20だということがわかっただけ。ソースをみるかぎりでは、suspension関係でエラーが起こっているらしいのだが……。 原因がわからないとなったら、ドキュメントを読んでみるしかない。昨日書いたようにjpeg_simple_progression()を呼ぶだけであとはやってくれるみたいだったからProgressive JPEG supportの項は読んでいなかったのだけど、やはり一度読んでみる必要がありそうだ。細かい内容はよくわからないが、インタレースGIFとは違って最初は解像度を低く、順に高くしていくという形式らしい。ということは、上から順にスキャンしたデータをそっくり作り直す必要があるのかもしれない。 読み進めていくと、「multiple-scan output cannot be created with a suspending data destination manager, since jpeg_finish_compress() does not support suspension.」という1文を発見。要するにI/O suspensionを使ってデータを書き出す場合にはプログレッシブJPEGでは保存できない、ということか。ということはおそらく、ファイルに直接保存するようにすれば正常に動くのだろうと思うが、ちょっと変更する度にファイルに保存、というのは効率が悪すぎる。。 それならいっそ、I/O suspensionを使わず、ファイルに書き込むところを書き換えてファイルのリファレンスナンバをわたす代わりに既存のハンドルを渡してファイルを書き込むのをハンドルの後ろにデータをつないでいくようにしたほうがいいかも知れない。本当にそれでちゃんと動くのかどうかはちょっと自信がないが(苦笑)。とりあえず明日にでもやってみることにしよう。 また胃の調子がおかしいので、今度はついに胃カメラまで体験してしまった(汗)。まず薬を2種類飲んで、胃の緊張をとるために注射をされ(おそらくバリウムのときのものと同じだと思われる)、ゼリー状の喉の麻酔を口に含ませられ、約10分後に飲み込む。舌やら口のなかが妙にしびれたような感じ。 それからしばらくして呼ばれ、ベッドに横たわる。目の上に布をかぶせられてなにも見えない状態で、右手から採血され、それと同時に喉にさらに麻酔。今度はスプレー状。何度も「あー」と言わされる(苦笑)。で、採血された右手を上げて、そこからよく覚えていないが、いつのまにか終わっていた。おそらく麻酔のおかげだと思うがまったく苦しいことはなかった。なぜかちょっと前に無茶苦茶苦しみながら胃カメラを飲まされた夢をみていてこわかったのだが(笑)。 終わってから、撮った写真をみながら説明をしてもらう。特に潰瘍などができているということもなく、心配することはないそうだ。あまり気持ちのいいものではないが、写真をもらってきた。あと、薬も。どんな薬なのかわからないけど、錠剤の方の効能は「消化管機能安定」「胃腸炎・消化器」と書かれている。そういえばカルテに慢性胃……なんとかと書かれていたからやっぱりなんかあったのかな。ま、11日にまたいかないといけないから細かいことはそのときにわかるんだろうと思うけど。 DOS/Vの方にTurboLinuxをインストールすることに成功したから次回はそんな話かも。意表をついて久々に買ったCDの話だったりするかもしれないけど。 |