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)