JPEGライブラリで相談なんですが

[戻る]
ナオーバ 2002/09/24(火) 13:21:22
現在JPEGをサムネイル(カタログ?)表示するものを開発しています。
ある程度形が出来てきた所で、現在使用しているJPEGライブラリに不具合が見つかり、
違うものを探しています。

現在使用している物はhttp://www.anthemion.co.uk/にあるCImage 1.4
で読込めないJPEGがありました。
このライブラリを少し修正してサムネイル表示用に1/8、1/4、1/2、1/1で読込めるようにしてい
ます。


ここで本題なんですが、サムネイル表示用に小さく読込めるJPEGライブラリってないでしょう
か?
できればVC++で利用できるC++のライブラリ。

あとIJGのライブラリを使って小さく読込める方法があるサイト情報など

それとインテルのJPEGライブラリって無くなったでしょうか?
サイト内を移動していくとIPP3.0ってとこになってしまいます

よろしくお願いします。

通りすがり 2002/09/25(水) 14:32:19
>IJGのライブラリを使って小さく読込める方法
ふつうにJPEGをデコードしてそれを小さくすればよいだけでは?
一行ずつデコードしては小さくするようにすれば、
そう面倒なことでもないし、メモリも食いません。

>インテルのJPEGライブラリ
今でもあります。評価版なら今でもダウンロードできるかと。
正規のものは購入になるとおもいます。

ナオーバ 2002/09/25(水) 15:51:09
レスありがとうございます。

>ふつうにJPEGをデコードしてそれを小さくすればよいだけでは?
勉強不足でJPEGの知識がありません。なのでこれもどうしてよいかわかりません。

現在使用しているCImageではIJGライブラリのexsample.cのread_JPEG_fileを基本にして、
jpeg_decompress_structのscale_num、scale_denomを設定しています。
scale_denomを1,2,4,8にすると小さくなります。
使用方法があっているかどうかわかりませんが、とりあえず小さく読込めています。


またまた問題で
今、CImageのIJGライブラリを最新?の6bに変えてみました
すると、今度はすべてのJPEGでエラーになります。
しかもよくわからないsetjmpなのでどうしていいか困っています。

setjmpの動きがわかりません。ステップ実行していると突然setjmpの行にいきます
解決する方法って有りますか?

何方かアドバイスお願いします

beginner 2002/09/25(水) 17:48:40
>使用方法があっているかどうかわかりませんが、とりあえず小さく読込めています
読み込んだ後に小さくしてるのでは?

私も過去にIJGのライブラリでjpegビューワを作ったことがあります。
もうすっかり忘れましたがバージョンは6bだったと思います。
それで、アドバイスではないですがたしかIJGからDLしたファイルの中に
example.cというファイルがあったと思います。
http://software.nikkeibp.co.jp/software/download/down00c.html
の2000年3月(2月だったか?)のサンプルの二つを読みながらどうにかこうにか
出来ました。
出来たって言うよりほとんど真似てみました。

ぜんぜんアドバイスじゃなくてすいません。

ナオーバ 2002/09/27(金) 00:17:04
[[解決]]
通りすがりさん、beginnerさんありがとうございました。
違う方法で解決しました

2002/09/27(金) 09:06:05
どのように解決したかご教授ください

ナオーバ 2002/09/27(金) 10:19:04
長くなりますがすみません

vectorにあったNxLibを使用します。このNxLibもIJGライブラリを使用しています。
NxLibをチュートリアルを見て使用できる状態にしてから、
NxLibでしようしているIJGライブラリの一部を変更します。

1.JDAPIMIN.C のdefault_decompress_parms関数内の
 cinfo->scale_denom = 1; の値を変数で変更できるようにする

 default_decompress_parms (j_decompress_ptr cinfo)を
 default_decompress_parms (j_decompress_ptr cinfo, int nScaleDenom)に変更して

 cinfo->scale_denom = 1を
 cinfo->scale_denom = nScaleDenom;に変更

2.default_decompress_parmsをgrepで検索して、使用している関数すべてを変更
 default_decompress_parmsが呼ばれる流れは 
 jpeg_read_header → jpeg_consume_input → default_decompress_parms なので
 
 JDAPIMIN.C の
 jpeg_read_header (j_decompress_ptr cinfo, boolean require_image, int 
nScaleDenom)
 ↑内のretcode = jpeg_consume_input(cinfo, nScaleDenom);

 jpeg_consume_input (j_decompress_ptr cinfo, int nScaleDenom)
 ↑内のdefault_decompress_parms(cinfo, nScaleDenom);

 JPEGLIB.H の
 EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo,
                   boolean require_image, int nScaleDenom));
 EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo, int nScaleDenom));
 
 に変更する。nScaleDenomを渡すだけ 
 grep検索した時に
 #define jpeg_consume_input    jConsumeInput
 がヒットしますがこれをどう変更してよいかわからないのでそのままです

NxLibのクラスの一部を変更します。
1.NxJPEGImageLoader.cpp のCreateDIBImage内の
 jpeg_read_header(&cinfo, TRUE );を
 jpeg_read_header(&cinfo, TRUE, 1 );に変更

2.NxJPEGImageLoader.cpp のCreateDIBImageをそっくりコピーして、
 CNxDIBImage* CNxJPEGImageLoader::CreateDIBImage(CNxFile& nxfile)を
 CNxDIBImage* CNxJPEGImageLoader::CreateDIBImage(CNxFile& nxfile, int 
nScaleDenom)に変更
 
 jpeg_read_header(&cinfo, TRUE );を
 jpeg_read_header(&cinfo, TRUE, nScaleDenom );に変更

 NxJPEGImageLoader.h に
 CNxDIBImage* CreateDIBImage(CNxFile& nxfile, int nScaleDenom = 1);を追加
以上を行いバッチビルドをしてライブラリを完成させます。

あとは追加した関数を使用するだけです。
私がやった事は CNxDIBImage を内部に持ったクラスを作成しました。
このクラスにCImageのときに使用した関数のDraw、Stretch、MakeBitmap、を追加して使用し
ています。

古いスレッドには追加発言できません。