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