JPEGライブラリで相談なんですが – プログラミング – Home

JPEGライブラリで相談なんですが
 
通知
すべてクリア

[解決済] JPEGライブラリで相談なんですが


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

現在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ってとこになってしまいます

よろしくお願いします。


引用未解決
トピックタグ
通りすがり
 通りすがり
(@通りすがり)
ゲスト
結合: 25年前
投稿: 92
 

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

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


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

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

>ふつうに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
 beginner
(@beginner)
ゲスト
結合: 23年前
投稿: 63
 

>使用方法があっているかどうかわかりませんが、とりあえず小さく読込めています
読み込んだ後に小さくしてるのでは?

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

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


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

通りすがりさん、beginnerさんありがとうございました。
違う方法で解決しました


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

どのように解決したかご教授ください


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

長くなりますがすみません

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、を追加して使用し
ています。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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