![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?08b1c8b)
libjpegライブラリを使って、画像を読み込んで、縮小表示したいと考えています。
libjpegを使えば、1/2,1/4,1/8は簡単にできると聞いていますが、やり方がわかりません。
優しい回答をいただけないでしょうか?
ちなみにいかに作ってみたコードを示します。
このコードは1/8に設定していますが、実行しても出力される画像が1/2となってしまいます。
どうすればよいでしょうか?
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <jpeglib.h>
void main()
{
struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr jerr;
FILE *outfile;
JSAMPARRAY img;
int i, j;
// イメージを保持するメモリ領域の確保と初期化
img = (JSAMPARRAY)malloc( sizeof( JSAMPROW ) * 256 );
for ( i = 0; i < 256; i++ ) {
img[i] = (JSAMPROW)malloc( sizeof( JSAMPLE ) * 3 * 256 );
for ( j = 0; j < 256; j++ ) {
img[i][ j * 3 + 0 ] = i;
img[i][ j * 3 + 1 ] = 0;
img[i][ j * 3 + 2 ] = j;
}
}
// JPEGオブジェクトの初期化
cinfo.err = jpeg_std_error( &jerr );
jpeg_create_compress( &cinfo );
// ファイルを開く
outfile = fopen( "a.jpg", "wb" );
jpeg_stdio_dest( &cinfo, outfile );
// パラメータの設定
cinfo.image_width = 256;
cinfo.image_height = 256;
cinfo.input_components = 3;
cinfo.in_color_space = JCS_RGB;
// デフォルト値の設定
jpeg_set_defaults( &cinfo );
cinfo.scale_num = 1;
cinfo.scale_denom = 8;
// 圧縮の開始
jpeg_start_compress( &cinfo, TRUE );
// 全イメージデータを出力
jpeg_write_scanlines( &cinfo, img, 256 );
// 圧縮の終了
jpeg_finish_compress( &cinfo );
// JPEGオブジェクトの破棄
jpeg_destroy_compress( &cinfo );
// ファイルを閉じる
fclose( outfile );
// イメージデータを保持するメモリ領域を開放
for ( i = 0; i <256; i++ )
free( img[i] );
free( img );
}
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
私もよく理解してはいないので,以下は参考までに.
scale_num/scale_denomは画像の縮小というより低ビットレート向けの画像圧縮が目的で,必要以上に画質を落とさないよう1/2未満に縮小できないようにしてあるのかもしれません.
下のWebページを見るとscale_num/scale_denomが導入されたのはlibjpeg ver.7です.
http://en.wikipedia.org/wiki/Libjpeg
その参照文献であるITU-T JPEG-Plus Proposal for Extending ITU-T T.81 for Advanced Image(p.11)によれば,
So the low-bitrate compression mode consists of following steps:
(1) choose N = 9…16;
(2) cjpeg (compress jpeg) –scale 8/N (downscale);
(3) djpeg (decompress jpeg) –scale N/8 (upscale).
とあるので,compression時に8/16(つまり1/2)未満にすることは想定していないように見えます.
しかし,試してみるとdecompressionのパラメータに設定するscale_num/scale_denomは1/8サイズに展開できるようです.それを使って画像を読み込むときに縮小するか,あるいは自前で縮小処理を実装するのが良いのではないでしょうか.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- 画像編集・動画編集・音楽編集 jpgが拡張子の画像を探しています 2 2023/04/06 10:03
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- PDF PDFに精通した方に質問。JPEGファイル群を一つのPDFファイルにするときの容量変化について 6 2023/07/23 19:06
- 一眼レフカメラ 「Imaging Edge」を手動起動せず、ARWファイルを最高画質JPEGへ変換する方法は? 2 2022/08/05 11:38
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数の画像をフェードイン・ア...
-
複数画像のランダム複数表示(...
-
外部ファイルにしたら文字化け...
-
透過pngの透明部分以外をクリッ...
-
Slick.jsのオプションrtlについて
-
背景色を透明化
-
順番にクラスをつけていく方法
-
1枚の画像をクリックすると複数...
-
getElementByIdの戻り値がnull...
-
iframe内のリンクが飛ばないの...
-
特定の画像を非表示にする方法
-
交互に入れ替わる画像を複数配置
-
横並びの画像を3枚時間差でフェ...
-
CSSで指定したwidthをマウスで...
-
マウスオーバーで画像変更
-
クリッカブルマップをロールオ...
-
PreLoadとImageオブジェクト
-
3点リーダーの作り方
-
ネットスケープでも動せるスク...
-
JavaScript多重ループを使ったH...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MFCで画像を表示させているので...
-
JavaScriptで変更した属性の元...
-
リンク先を動的に変更する
-
HTMLからimgのsrcのみを正規表...
-
外部javascriptの重複を防ぐには
-
外部ファイルにしたら文字化け...
-
OpenCVで固定枠で画像を操作す...
-
画像が表示でnull; this.src
-
複数画像のランダム複数表示(...
-
指定したフォルダの画像を一括...
-
ラズパイでno module named zbar
-
pythonのpygameでキャラクター...
-
条件分岐でキーが入力されてい...
-
libjpegライブラリの使い方につ...
-
"lightbox"の"CLOSE"ボタンクリ...
-
imageクラスからiconクラスに変...
-
error LNK2019 未解決のシンボ...
-
html内にスライドショーを複数設置
-
複数の画像をフェードイン・ア...
-
Iplimageについて
おすすめ情報