IJGのライブラリにある rdjpgcom.c を使用した事ありますか? – プログラミング – Home

IJGのライブラリにある rdjpgc...
 
通知
すべてクリア

[解決済] IJGのライブラリにある rdjpgcom.c を使用した事ありますか?


ナオーバ
 ナオーバ
(@ナオーバ)
ゲスト
結合: 23年前
投稿: 187
Topic starter  

IJGのライブラリにあるrdjpgcom.c の機能のJPEGの
[ヘッダー情報からJPEGのサイズを取得]を利用したいのですが、
エラーになると終了するようになっています。

一部抜粋
#define ERREXIT(msg) (fprintf(stderr, %s\n, msg), exit(EXIT_FAILURE))
static int
first_marker (void)
{
int c1, c2;

c1 = NEXTBYTE();
c2 = NEXTBYTE();
if (c1 != 0xFF || c2 != M_SOI) ERREXIT(Not a JPEG file);
return c2;
}
static int read_1_byte (void)
{
int c;

c = NEXTBYTE();
if (c == EOF) ERREXIT(Premature EOF in JPEG file);
return c;
}
などのERREXIT内のexitで終了します。

これを簡単に改造する方法ってありますか?
クラスで使用する関数にしたいのでエラーとして返ってほしいのですが。

宜しくお願いします。


引用未解決
トピックタグ
beginner
 beginner
(@beginner)
ゲスト
結合: 23年前
投稿: 63
 

#define ERREXIT(msg) (fprintf(stderr, %s\n, msg), exit(EXIT_FAILURE))

となっているので、

#define ERREXIT(msg) (fprintf(stderr, %s\n, msg), return -1)

とかに書き換えてみたらどうなりますか?


返信引用
ナオーバ
 ナオーバ
(@ナオーバ)
ゲスト
結合: 23年前
投稿: 187
Topic starter  

レスありがとうございます。

ERREXITを使用している関数の戻り値が
static void、static unsigned int
の場合もあるので無理そうです

JPEGのヘッダの構造がわからないのでエラー値としていくつを返してよいかわかりません。

何方か詳しい方、rdjpgcom.cを改造して使用した方いませんでしょうか

よろしくお願いします


返信引用
chemo
 chemo
(@chemo)
ゲスト
結合: 23年前
投稿: 4
 

あまりきれいではありませんが、setjmp、longjmpを使うというのはどうでしょうか?
IJG の example.c で使用しているので参考にしてみるのもいいかもしれません。


返信引用
ナオーバ
 ナオーバ
(@ナオーバ)
ゲスト
結合: 23年前
投稿: 187
Topic starter  

レスありがとうございます。

そうですよね、setjmp、longjmpを使用すればいいんですね。
チャレンジしてみます。


返信引用
MASATO
 MASATO
(@MASATO)
ゲスト
結合: 23年前
投稿: 53
 

exitではなく、何らかのコールバック関数を呼ぶようにしておいて、
そのコールバック関数内で例外を発生させてみてはどうでしょうか。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました