2011-07-29 53 views
10

我知道有很多这方面的工具。我的目标是学习。 所以我可以用fopen()读取一个JPEG文件,我知道这是一个二进制文件。 然后呢?我知道我可以学习JPEG规范。但它似乎没有告诉二进制jpeg文件的结构是什么。如何从头开始编写JPEG文件解码器

此文件包含零和 我该如何转换这个或我怎么知道哪一个比特链意味着什么?

我遇到这个例子:nano jpeg decoder 但它是相当难以阅读的代码

在此先感谢

PS:This princeton guy has done a project on this which provides a good reference

+0

该结构看起来相当松散 - goosie。我希望看到任何具有使用此格式的深入知识的人员的答案。 –

+0

普林斯通连线已死。猜猜他们毕业了... –

+1

普林斯顿大学毕业生和他的项目PDF可以在他的网站上找到:http://www.ctralie.com/PrincetonUGRAD/Projects/JPEG/jpeg.pdf –

回答

20

This页面上有很多关于如何处理jpeg文件的信息。另外,你可以看看my own attempt在Python中编写一个jpeg解码器。

程序中的短变量名通常直接对应于标准中的变量。所以如果你准备好了这个标准,它会有很大的帮助。它的名字叫ITU-1150,可以在互联网上免费下载。

+1

通过将您的Python代码视为伪代码,这可能正是OP所需要的。 –

+0

@luser这是我写作它的原始动机。我在Python中创建原型,然后转换为C,但我从来没有做过。 :) – onemasse

+0

如果你能通过一些有趣的评论来引导我们完成代码,那将会获得赏金。也可能接受,如果OP执行检查:) –

13

JPEG文件是棘手的,如果你是刚刚开始。您需要使用huffmann表格,具有某种快速逆离散余弦变换函数以及解释量化表的能力。

http://en.wikipedia.org/wiki/JPEG是相当有帮助的。

如果你想从简单的事情开始,看看PNG。格式基本上是一个头,后面跟着一堆可变长度的块,然后是一个zlib流。解压缩会让您获得几乎未加工的像素,但它们已被滤除。未过滤很容易。