libjpeg では、出力イメージをスケーリングするルーチンが許可されていますか?
入力で幅1、高さ1を提供し、出力で幅2、高さ2を取得するときに、保存および読み込み時にサイズを変更する必要がある画像があり、外部では何も使用できません。
はい、libjpegは画像スケーリングをサポートしていますが、いくつかの制限があります。
Libjpegバージョン8c以降は、Mが1〜16の整数であるM / 8スケーリングをサポートします。より一般的に使用されるlibjpegバージョン6bは、1、2、4、および8のMのみをサポートします(つまり、2の累乗のダウンスケーリング)。
scale_numとscale_denomを使用して、スケーリング分子と分母を解凍オブジェクトに指定します。jpeglib.hのjpeg_decompress_structを参照してください。使用例については、djpeg.cを参照してください。
これは、画像全体をデコードしてからダウンスケーリングするよりもはるかに高速で、潜在的に高品質です。
いいえ、自分でスケーリングする必要があります(線形補間は最も簡単で最速ですが、正方形のピクセルが得られます。双一次/三一次/双一次はトリッキーですが、よりスムーズな結果が得られます)、または汚い作業を行うライブラリを使用します(OpenCV、SDL、imagemagick、libpipiなどを確認してください)
単純な最近隣内挿法の実際のコード(最適化されていない):
dest[dx+dy*dest_width] = src[(dx*src_width/dest_width)+(dy*src_height/dest_height)*src_width]
dest_widthとdest_heightに従ってdxとdyを繰り返すだけです。しかし、実際には、これにはライブラリを使用してください。