libjpeg 是否允许/有例程来缩放输出图像?
我有一个图像需要在保存和加载时调整大小,在输入上提供宽度1,高度1并在输出上获取宽度2,高度2,我真的不能在外面使用任何东西。
是的,libjpeg 确实支持图像缩放,但有一些限制。
Libjpeg 版本 8c 及更高版本支持M/8 缩放,其中 M 是 1 到 16 之间的整数。更常用的 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。但实际上,为此使用一个库。