【问题标题】:Decode part of JPEG file解码部分 JPEG 文件
【发布时间】:2012-08-18 22:25:00
【问题描述】:

我正在尝试加载内存占用有限的大型 JPEG 文件(数百兆像素)的一部分。我只需要大约 20000 的 1000 条扫描线。似乎 libjpeg(以及它的 fork libjpeg-turbo)的当前实现没有提供一种方法来跳过不需要的 19k 扫描线而不解码它们。有没有不深入研究 libjpeg 内部的解决方法?

【问题讨论】:

    标签: jpeg partial libjpeg


    【解决方案1】:

    您无法避免解码要跳过的扫描线,但您可以避免将它们存储在任何地方。当您从 libjpeg 获取每一行的回调时,只需等待行号与您想要的扫描线部分匹配即可。

    【讨论】:

    • 为什么我不能这样做? AFAIU JPEG 存储在 8x8 块中,因此如果我只需要 1000 条底部扫描线,我可以跳过顶部块 (19k/8) 并只解码我需要的块。我错过了什么吗? (我们不考虑渐进式压缩atm)
    • 自从我不得不使用 JPEG 内部构件以来已经有很长时间了,但是在对 8x8 块进行 DCT 变换之后是否应用了 Huffmann 压缩?这意味着顶部块是可变数量的数据,因此如果不进行 Huffmann 解码,您不知道要跳过多少。至少。我想你可以这样做并避免进行 DCT 重建,但正如你所说,这会让你深入 libjpeg 内部。
    【解决方案2】:

    部分 JPEG 解码是在一年前在 jpeglib-turbo 中实现的。我没试过,但我想应该可以。

    检查一下:

    Add further partial decoding optimization #34

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多