【发布时间】:2014-09-02 11:49:03
【问题描述】:
我有一个包含多个 jpg 图像的文件。我想将它们一一读入缓冲区以单独解码。除了图片头和图片数据,不知道文件中是否保存了其他信息。
jpg 图像以 SOI 字节开始,以 EOI 字节结束。我可以假设这些字节只出现在图像的开头和结尾吗? 然后我会尝试将 unsigned char 片段读入缓冲区,只检查是否找到了 SOI 或 EOI。
这行得通吗? (仍处于规划阶段,因此还没有代码……不过会是 c 或 c++)
【问题讨论】:
我有一个包含多个 jpg 图像的文件。我想将它们一一读入缓冲区以单独解码。除了图片头和图片数据,不知道文件中是否保存了其他信息。
jpg 图像以 SOI 字节开始,以 EOI 字节结束。我可以假设这些字节只出现在图像的开头和结尾吗? 然后我会尝试将 unsigned char 片段读入缓冲区,只检查是否找到了 SOI 或 EOI。
这行得通吗? (仍处于规划阶段,因此还没有代码……不过会是 c 或 c++)
【问题讨论】:
标记实际上是两个八位字节,0xFF 加上实际的标记代码。 SOI 为 0xFF,0xD8,EOI 为 0xFF,0xD9。此外,该标准规定,当您编码图像数据时,如果您编码 0xFF 八位字节(即它不是标记),那么您需要使用 0x00 跟随它,以便解码器/扫描仪不会认为它是标记(这是称为字节填充)。无论如何,鉴于此,您应该可以很好地扫描 SOI 和 EOI 标记。
编辑:您可能会发现嵌入缩略图的图像...在这种情况下,您可能需要保留标记的数量...例如0xFF,0xD8,...0xFF,0xD8,...0xFF,D9...0xFF,D9 将是带有嵌入缩略图的单个图像。
【讨论】: