【问题标题】:libjpeg output scalinglibjpeg 输出缩放
【发布时间】:2011-09-20 15:52:07
【问题描述】:

libjpeg 是否允许/有例程来缩放输出图像?

我有一个图像在保存和加载时需要调整大小,输入时提供width1,height1,输出时获取width2,height2,我真的不能在外面使用任何东西。

【问题讨论】:

    标签: c libjpeg


    【解决方案1】:

    是的,libjpeg 确实支持图像缩放,但有一些限制。

    Libjpeg 版本 8c 及更高版本支持 M/8 scaling 其中 M 是 1 到 16 之间的整数。更常用的 libjpeg 版本 6b 仅支持 1、2、4 和 8 的 M(即 2 的幂次缩放) .

    使用 scale_num 和 scale_denom 为解压对象提供缩放分子和分母。参见 jpeglib.h 中的 jpeg_decompress_struct。使用示例可以参考 djpeg.c。

    这比解码整个图像然后缩小比例要快得多,而且质量可能更高。

    【讨论】:

    • 由于缩放是在感知空间而不是线性光中执行的,这将导致阴影扩大而高光消失。
    【解决方案2】:

    不,您需要自己缩放它(线性插值是最简单和最快的,但会产生方形像素,双线性/三线性/双三次会更棘手,但会产生更平滑的结果),或者使用会做脏的库为你工作(检查 OpenCV、SDL、imagemagick、libpipi 等)

    更多关于此herehere

    简单最近邻插值的实际代码(未优化):

    dest[dx+dy*dest_width] = src[(dx*src_width/dest_width)+(dy*src_height/dest_height)*src_width]
    

    只需根据dest_width和dest_height迭代dx和dy即可。但实际上,为此使用一个库。

    【讨论】:

      猜你喜欢
      • 2021-05-27
      • 1970-01-01
      • 2014-07-19
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 2018-12-12
      相关资源
      最近更新 更多