如何写一个JFIF文件?

时间:2013-02-10 02:28:55

标签: jpeg

我正在开发一个C ++项目,我必须压缩JPEG格式的位图数据,并将.jpg文件作为输出写入,该文件可以由普通的图像查看器打开。 我不能使用任何类型的库。

所有JPEG压缩都已完成,我唯一缺少的是如何正确地写入文件中的内容。

我已经查看了JFIF格式文件规范,并且搜索了很多内容,但无法弄清楚如何去做。

更详细的说明,我应该将所有标题正确放入文件中,我真正想念的是,在准备好编写3种颜色的组件之后,我该怎么做? (按顺序编写组件,如何处理子采样组件(还有其他东西吗?))

编辑:

链接到示例输出图像(从随机生成的8x8 RGB位图开始)。

https://dl.dropbox.com/u/46024798/out.jpg

图像的标题(应该)指定这是一个带有3个颜色分量的JPEG 8x8px,子采样4:4:4。

更详细的说,我所做的是:

  • 生成3个随机8x8块,其值在[0..255]
  • 范围内
  • 将128减去所有元素(现在范围[-128..127])
  • 将离散的Cosene Transormation应用于3个块
  • 量化结果
  • 以zig-zag顺序放置量化结果
  • 在Huffman表中查找要在文件中写入的值(使用End Of Block标记和那种东西)

对于JPEG压缩,这应该没问题。

然后我写了文件:

  • 首先,我写SOI标题,APP0标记,“魔术字符串”JFIF,版本,单位,密度和缩略图信息
  • 然后是量化表
  • 然后是帧开始标记,具有图像精度,尺寸,组件数量,子采样信息,DC霍夫曼表和AC霍夫曼表
  • 然后是“扫描开始”标题(可能是我搞砸了),其中我指出了用于每个组件的霍夫曼表的ID以及其他我不确切知道其含义的东西(光谱选择?? ,逐次逼近??)
  • 最后,我按此顺序编写Huffman编码值:
    • 所有Y块
    • 所有Cb块
    • 所有Cr块
  • 和图像结束

0 个答案:

没有答案