gpt4 book ai didi

c - jpeg文件格式解码

转载 作者:太空狗 更新时间:2023-10-29 16:56:30 25 4
gpt4 key购买 nike

我正在尝试使用 C 从头开始​​编写 JPEG/JFIF 编码器和解码器。我尝试编写示例 JPEG 文件,但似乎无法使用 MS paint、Firefox 打开它。但我可以使用 JPEGsnoop ( http://www.impulseadventure.com/photo/jpeg-snoop.html?ver=1.5.2 ) 和 http://nothings.org/stb_image.c 对其进行解码.我认为示例JPEG文件符合JPEG/JFIF标准,我不知道为什么MS paint和Firefox等应用程序无法打开它。

这是示例 JPEG 的样子:

    SOI       APP0 segment       DQT  segment (contains two quantization tables)       COM  segment       SOF0 segment       DHT  segment (contains four Huffman tables)       SOS  segment       huffman encoded data    EOI

示例 JPEG 文件具有三个分量 Y Cb Cr。没有对 Cb Cr 分量进行子采样。两个量化表都是用1填充的。DHT段中的4张huffman表都是一模一样的,长这样

      [0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0]      [0,1,2, ... , 254]

这意味着所有的代码都是 8 位的,所以哈夫曼编码并没有真正压缩数据。

霍夫曼编码后的数据是这样的:

       [0x0000(DC) 0x0000(AC)](Y)         [0x0000(DC) 0x0000(AC)](Cb)        [0x0000(DC) 0x0000(AC)](Cr)  for all (i, j) MCUs except (10, 10)       the data in (10, 10) MCU:        [0x0008(DC) 0x0000(DC), 0x0000(AC)](Y)         [0x0000(DC) 0x0000(AC)](Cb)        [0x0000(DC) 0x0000(AC)](Cr)

谁能告诉我这个示例 JPEG 文件有什么问题?谢谢。

这是示例 JPEG 文件 (ha.jpg) 的链接 http://www.guoxiaoyong.net/ha.jpg

最佳答案

几年前,我遇到过一些 PNG 代码的类似问题(尽管我不是从头开始编写的)。事实证明,我的代码比 Windows、某些浏览器等的库更符合标准。它们在典型情况下做得很好,但在不寻常的和人为的图像上却令人窒息,即使它们完全符合标准。使它们出错的一种常见方法是对图像使用奇数像素宽度。我的测试套件中几乎有一半无法在 Windows 上查看。 (这是很多以前的版本,比如 Windows 95。Windows 编解码器有了很大改进。)

我最终构建了开源 PNG 库并将其用作我的引用实现。只要我的代码生成的图像可以被引用实现解析,反之亦然,我称之为好。我还检查了我的代码是否可以显示 Windows 可以显示的任何图像。每次我发现错误时,我都会在修复之前将图像添加到我的测试套件中。这对我的项目来说已经足够好了。

你也可以这样做。我相信有一个广泛用作引用实现的开源 JPEG 库。

如果您真的想弄清楚为什么 Firefox(或其他软件)无法打开您的图片,您可以尝试从一张可以在 Firefox 中打开的图片开始。逐步进行小的更改(例如,使用十六进制编辑器)以使其更像失败的图像。这可能会帮助您缩小图像的哪个方面使应用程序绊倒的范围。不可否认,其中一些步骤可能很难尝试。

关于c - jpeg文件格式解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6777107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com