【问题标题】:How can I manipulate/rotate a JPEG image in C++?如何在 C++ 中操作/旋转 JPEG 图像?
【发布时间】:2013-01-29 15:46:55
【问题描述】:

我想使用已编译的 libjpeg-9 example.c 和 transupp.c 代码和库在 Eclipse 项目中旋转 .jpg 图像。

从一开始就实现这一目标的工作进展:Compiling/using libjpeg in Windows for Eclipse

尝试将 do_rot_180 和读/写功能集成到一个位置:Need help compiling jpegtran.c code from libjpeg

【问题讨论】:

  • 您想翻转图像还是旋转图像180°? IE。你想把左上角翻译成左下角还是右下角?
  • 你似乎用'libjpeg'标记了这个,所以你知道它......然后呢?
  • FWIW,来自 Linux 命令行:$ convert input.jpg -rotate 180 output.jpg
  • 看看stackoverflow.com/questions/12802231/…这不是你的问题的重复,但可能会让你开始。
  • 那么问题出在哪里?您的代码是否无法正常工作,或者您是否正在寻找有人为您提供代码?如果是后者,那么 SO 可能不是一个好的选择。

标签: c++ windows jpeg libjpeg


【解决方案1】:

transupp.c 中的libjpeg 中的do_rot_180 函数(您知道它,因为 Q 有标签)正在执行您想要的操作。

LOCAL(void)
do_rot_180 (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
        jvirt_barray_ptr *src_coef_arrays,
        jvirt_barray_ptr *dst_coef_arrays)
/* 180 degree rotation is equivalent to
 *   1. Vertical mirroring;
 *   2. Horizontal mirroring.
 * These two steps are merged into a single processing routine.
 */

该函数被jtransform_execute_transformation/JXFORM_ROT_180使用,并有损重新排序JPEG的内部以实现旋转效果。 This function 演示使用和旋转给定文件并使用指定的变换(角度)写入新的修改文件。

【讨论】:

  • 关键字是jtransform_execute_transformation,你会在网上找到很多代码sn-ps e.g. read.pudn.com/downloads151/sourcecode/graph/652797/… - 这很简单:从文件到文件和旋转类型作为参数。
  • 即用功能不足?比这更好的是只有当有人为你编写代码时。
  • 不,这不是过时的,而是您在构建基于 libjpeg 的简单 C++ 应用程序时遇到问题。我不确定这里最好的解决方案是什么,1 解决问题并构建应用程序,或者2 查找为您执行此操作的命令行工具,或者3 构建libjpeg 示例,看看究竟如何它们是经过设计和结构化的。您不必使用libjpeg,使用 GDI+ 或任何其他以更方便(对您而言)的方式进行旋转的东西。
  • 补充一点,这不是一个简单的任务。 JPEG 的美妙之处在于,高效的无损旋转甚至是可能的。
  • 您的错误是您认为这是一项简单的单独任务。不,JPEG 图像不是像素矩阵。这是一个编码成比特流的图像,旋转是一项复杂的任务。您必须找到一种方法来编译它,否则您将无法利用执行您感兴趣的任务的函数。
【解决方案2】:

你看过imagemagick library吗?它是免费且非常强大的工具

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 2011-01-17
    • 2018-10-14
    • 1970-01-01
    相关资源
    最近更新 更多