- 締切済み
JPEGファイルの読み込みについて
画像処理プログラム作成中なのですが、JPEGファイルを開けなくて困っています。 開発言語はC++、コンパイラはBorland C++ 5.5.1 for Win32を使用しています。 JPEGライブラリ内で登録されている関数jpeg_create_decompressを使用すると、そこでエラーが発生しているようなのですが、エラーの発生原因として何があげられるでしょうか。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- machongola
- ベストアンサー率60% (434/720)
こんにちは。補足いただきました。 >>無視させるのは227行目だけでいいのでしょうか? はい。 jmorecfg.hの最初辺りに、 #include<windows.h> #define HAVE_BOOLEAN と書いてjpeglibライブラリをビルドすればOKの筈です。此れで構造体のサイズが一致する筈です。 jpeglibライブラリ自体にもwindows.hのbooleanを使用させてビルドする必要があります。
- machongola
- ベストアンサー率60% (434/720)
こんばんは。 jmorecfg.hの227行目辺りに有る、 #ifndef HAVE_BOOLEAN typedef int boolean; #endif 辺りが如何にも怪しそうです。 jpegとは関係ないヘッダをインクルードした時に、booleanが衝突しませんでしたでしょうか? 例えば、 利用者側ソースの冒頭で、 #include<???.h> //この中にtypedef unsigned char booleanが存在するので、 #define HAVE_BOOLEAN //jmorecfg.h側でbooleanをtypedefさせない様にする為、利用者側ソースの方で#defineすると、 #include"jpeglib.h" //構造体のサイズが狂ってしまう。 見たいな事をしていないでしょうか? jmorecfg.hはjpeglib側のソースでも利用されているので、上記の様なやり方だと問題を起こします。 此れがトラブルの犯人であれば、jmorecfg.hの中の冒頭辺りで、 #include<???.h> //使いたいbooleanが書いてあるヘッダをインクルードする #define HAVE_BOOLEAN //227行目を無視させる とすれば解決は出来ます。
補足
回答ありがとうございます. 確かにbooleanが衝突していました.なので,jmorecfg.hの 227行目:typedef int boolean をコメントアウトして実行するというかたちをとっていました. 今作っているプログラムには windows.h windowsx.h stdlib.h stdio.h string.h jpeglib.h をincludeしていて,booleanは rpcndr.h で先に定義されているようです. この場合,jmorecfg.hの “#define HAVE_BOOLEAN //227行目を無視させる” とありますが,無視させるのは227行目だけでいいのでしょうか? それとも #ifndef HAVE_BOOLEAN typedef int boolean; #endif の3行すべてをコメント化すればいいのでしょうか?
- eroermine
- ベストアンサー率18% (83/444)
エラーの出る場所なのですか。 まだJpegヘッダーも読んでないはずなのでメモリ確保にしても小さい固定領域のはず。 渡した構造体アドレスくらいしかチェックの場所もないのでは。 borlandは知らないのですが、ライブラリを作ったときと構造体パックオプションが違うとか。
お礼
読み込みできました。 大変助かりました。的確なアドバイスありがとうございます。