The Independent JPEG Group's JPEG software for OS/2 =================================================== This software is copyright (C) 1991-1996, Thomas G. Lane. Packaging for OS/2 by homy/newfs(8) これはなに? =========== 本パッケージは Independent JPEG Group が作成した JPEG ソフトウェア Release 6a を OS/2 で実行できるようコンパイルしたものです。DLL といくつ かのユーティリティが含まれています。 旧版(Release 6)をお使いの方へ ============================= Release 6 と Release 6a ではバイナリ互換性がありません。ただし、 Release 6a では DLL 名を Release 6 とは別のものに変更したので、このま まインストールしても従来の版を利用したプログラムはそのまま利用すること ができます。 御自分で作成なさったプログラムで本リリースのライブラリを利用する場合は、 ヘッダの置き換え(必須です。注意してください)とインポートライブラリの再 構築を行った後に再コンパイルしてください。再リンクだけでは正しく動作し ません。 DLL 名は IJGJPEG6.DLL から IJGJPG6A.DLL に変更になりました(JPEG->&JPG)。 直接 DLL をロードするようなプログラムで利用する場合はご注意ください。 無保証 ====== 本パッケージは無保証です。本パッケージが原因で利用者が被ることとなった いかなる被害についても、作者、配布者、その他利用者以外の人物、団体に責 任をとる義務はないものとします。 使用条件等 ========== 本パッケージの利用条件は、ファイル README に記述してあります。日本語で 平易な文で表現すると、以下のとおりです。 1. 本ソフトウェアが動作するかどうか保証しません 2. あなたは本ソフトウェアを望むように利用できます。お金を払う必要はあ りません。 3. あなたは、本ソフトウェアを自分が作成したものだと偽ってはいけません。 もしプログラムの作成に使用したなら、ドキュメントのどこかで IJG のソフ トウェアを使用したことに(感謝を込めて)言及してください。 以上の条件は OS/2 版パッケージ作成者が勝手に翻訳したものです。内容につ いては無保証です。公式には、必ず README を参照してください。 使い方 ====== IJGJPG6A.DLL ファイルを CONFIG.SYS に記述してある LIBPATH で示されるい ずれかのディレクトリにコピーしてください。本パッケージに同梱されている *.EXE ファイルが利用できるようになります。*.EXE ファイルの機能は以下の とおりです。詳しい使用方法は usage.doc を参照してください。 cjpeg.exe - 各種画像を JPEG に変換する djpeg.exe - JPEG を各種画像に変換する tranjpeg.exe - JPEG ファイルの形式を変換する(通常<&->&プログレッシブ等) rdjpgcom.exe - JPEG ファイルのコメント部を読む wrjpgcom.exe - JPEG ファイルにコメント部を付加する cjpeg と djpeg がサポートするフォーマットは BMP(Windows, OS/2)、PPM、 PGM、GIF、Targa です。 プログラム開発 ============== ライブラリの使用方法は、同梱の libjpeg.doc を参照してください。 本パッケージは IBM VisualAge C++ により作成されています。 あなたが作成したプログラムをリンクするときは、同梱のインポートライブラ リをリンクしてください。例えば以下のようにします。 icc myprog.c ijgjpgi.lib emx で利用する場合も同梱のインポートライブラリを利用するか、emximp を 用いて .a 形式のインポートライブラリを作成してリンクしてください。 gcc -o myprog.exe myprog.c ijgjpgi.lib -Zomf emximp -o ijgjpgi.a ijgjpgi.lib gcc -o myprog.exe myprog.c ijgjpgi.a emx での利用 ------------ 本ライブラリは IBM VisualAge C++ (以下VAC++)のライブラリを用いて構成さ れています。VAC++ と emx では FILE * 構造体に互換性がないため、emx 環 境からはデフォルトの入出力マネージャを用いることはできません。すなわち、 fopen() 等で作成された FILE * 構造体を jpeg_stdio_src() に渡しても正し く動作しません。 emx から利用する場合は、自分で入出力マネージャを作成してください。以下 に簡単な例をあげます。入出力マネージャの作成には、jdatasrc.c と jdatadst.c(オリジナルの JPEG ライブラリのソースに含まれます)が参考にな ります。ただし、本アーカイブには同梱していません。別途入手してください (archie 等で jpegsrc.v6a.tar.gz で検索すると見つかるはずです)。 typedef struct { struct jpeg_source_mgr pub; FILE *fp; char *buffer; boolean start_of_file; } my_src, *my_src_ptr; METHODDEF(void) my_init_source(j_decompress_ptr cinfo) { my_src_ptr src = (my_src_ptr) cinfo->&src; src->&start_of_file = TRUE; } METHODDEF(boolean) my_fill_input_buffer (j_decompress_ptr cinfo) { my_src_ptr src = (my_src_ptr) cinfo->&src; size_t nbytes; nbytes = fread(src->&buffer, 1, MY_BUFSIZ, src->&fp); if (nbytes <&= 0) { if (src->&start_of_file) /* Treat empty input file as fatal error */ ERREXIT(cinfo, JERR_INPUT_EMPTY); WARNMS(cinfo, JWRN_JPEG_EOF); /* Insert a fake EOI marker */ src->&buffer[0] = (JOCTET) 0xFF; src->&buffer[1] = (JOCTET) JPEG_EOI; nbytes = 2; } src->&pub.next_input_byte = src->&buffer; src->&pub.bytes_in_buffer = nbytes; src->&start_of_file = FALSE; return TRUE; } METHODDEF(void) my_skip_input_data (j_decompress_ptr cinfo, long num_bytes) { my_src_ptr src = (my_src_ptr) cinfo->&src; if (num_bytes >& 0) { while (num_bytes >& (long) src->&pub.bytes_in_buffer) { num_bytes -= (long) src->&pub.bytes_in_buffer; (void) my_fill_input_buffer(cinfo); } src->&pub.next_input_byte += (size_t) num_bytes; src->&pub.bytes_in_buffer -= (size_t) num_bytes; } } METHODDEF(void) my_term_source (j_decompress_ptr cinfo) { } void jpeg_my_src(struct jpeg_decompress_struct *cinfo, FILE *fp) { my_src_ptr src; if (cinfo->&src == NULL) { cinfo->&src = (*cinfo->&mem->&alloc_small)((j_common_ptr)cinfo, JPOOL_PERMANENT, sizeof(my_src)); src = (my_src_ptr)cinfo->&src; src->&buffer = (*cinfo->&mem->&alloc_small)((j_common_ptr)cinfo, JPOOL_PERMANENT, MY_BUFSIZ * sizeof(JOCTET)); } src = (my_src_ptr)cinfo->&src; src->&pub.init_source = my_init_source; src->&pub.fill_input_buffer = my_fill_input_buffer; src->&pub.skip_input_data = my_skip_input_data; src->&pub.resync_to_restart = jpeg_resync_to_restart; src->&pub.term_source = my_term_source; src->&fp = fp; src->&pub.bytes_in_buffer = 0; src->&pub.next_input_byte = NULL; } int main(int argc, char **argv) { FILE *fp = fopen(argv[1], "rb"); struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; char *buffer; int i; cinfo.err = jpeg_std_error(&jerr); jpeg_create_decompress(&cinfo); /* 自前のルーチンを使うように設定する */ jpeg_my_src(&cinfo, fp); jpeg_read_header(&cinfo, TRUE); jpeg_start_decompress(&cinfo); buffer = (*cinfo.mem->&alloc_small)((j_common_ptr)&cinfo, JPOOL_PERMANENT, cinfo.output_width * cinfo.output_components); for (i = 0; i <& cinfo.output_height; i++) { jpeg_read_scanlines(&cinfo, (JSAMPARRAY)&buffer, 1); } return 0; } OS/2 版について =============== 本パッケージの DLL および実行ファイルは IBM VisualAgeC++ 3.0 (CTC305) でコンパイルし、同マルチスレッド用ランタイムライブラリがスタティックリ ンクしてあります。 メモリマネージャとしては jmemnobs を使っています。大きな画像の処理を行 う場合には、十分なスワップスペースを確保してください。 パッケージ作成者 ================ ご意見、ご要望、はげまし、うはうはな画像ファイルは以下までお願いします。 また、読めない画像があった等のご報告もお気軽にどうぞ。 homy/newfs(8)