【问题标题】:JPEG SOS specificationJPEG SOS 规范
【发布时间】:2018-09-02 21:50:29
【问题描述】:

我正在逐字节解析 java 中的 JPG。然后我逐字节地写相同的图像,我遇到了一个奇怪的问题。我已尝试查看规范,但没有看到任何参考。

在 SOS 部分的末尾,大多数消息来源都说“跳过”三个字节。但是如果我写 0x00,0x00,0x00 那么 java(fx) 会抱怨一个无效的值。如果我写 0x000x3f0x00 那么没有投诉。 (三字节序列是GIMP在原始文件中产生的)

我偶然发现了对这个in the GoLang repo的间接引用

//  - the bytes "\x00\x3f\x00". Section B.2.3 of the spec says that for
//    sequential DCTs, those bytes (8-bit Ss, 8-bit Se, 4-bit Ah, 4-bit Al)
//    should be 0x00, 0x3f, 0x00<<4 | 0x00.

我的问题是我应该在这个位置写 0x3f,还是这个值取决于其他东西?

【问题讨论】:

    标签: jpeg


    【解决方案1】:

    在连续 JPEG 扫描中,此值没有任何意义。标准说将其设置为 63,但这并不告诉解码器。您必须在顺序扫描中处理所有 64 个 DCT 系数。

    在逐行扫描中,这个值意味着很多。

    【讨论】:

    • 谢谢。这是顺序扫描,我可以毫无问题地进行完整的循环读取、写入、读取。也许隐藏在 javafx.scene.image.Image 后面某处的 jpg 解析器非常严格。但是您的回答很有帮助,因为这意味着我只需将 63 放在这个位置,直到我开始处理渐进式 jpg。如果每个人都跳过它们,我确实想知道这三个字节是做什么用的。现在我知道了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 2021-12-19
    • 2015-03-01
    相关资源
    最近更新 更多