图形文件格式类型如何工作?

时间:2015-02-09 05:36:42

标签: graphics png file-format

我非常有兴趣了解图形文件格式(PNG,JPG,GIF)的工作原理。是否有任何代码示例演示如何制作这些文件以及如何解释它们(在浏览器中查看)?

2 个答案:

答案 0 :(得分:0)

通过阅读文件格式规范并使用您最熟悉的语言实现解析器,可以获得最详细的信息。

一种好方法是读取格式并将其转换为四字节tupples(RGBA,一种颜色的红色,绿色,蓝色和alpha部分)的数组。这将允许您使用此格式作为介于两者之间格式之间的格式,便于转换。同时,大多数API都支持显示这种原始格式。

开始使用的好格式是BMP。如果这是你第一次遇到编写解析器,这是一种安全的“简单”格式。一个好的第二种格式是PNG。从未压缩的变体开始,然后添加压缩。

下一步是TGA学习阅读块或JPG以了解有关压缩的更多信息。

额外提示:编写器的某些实现包含(ed)错误,导致图像违反格式。其他人添加了从未进入官方规格的额外功能。在编写解析器时,这可能是一个真正的痛苦。当您遇到问题时,请先猜测您正在尝试阅读的图像。一个好的二进制/ hex文件阅读器/编辑器可以是一个非常有用的工具。我使用了AX,如果我没记错的话,它允许你用格式覆盖十六进制代码,这样你就可以快速识别标题和块。

答案 1 :(得分:0)

无论您使用哪种图形文件格式,都需要了解所有图形文件的基本特性。

  • 文件标题
    1. 文件类型,版本,(时间和日期标记 - 如果包含)
    2. 可能的数据结构/信息或块
    3. 预期颜色类型的标志,压缩是否可用以及哪种类型,字节顺序(字节顺序),透明度以及其他各种标志。
  • 图像数据信息
    1. 宽度通常以像素为单位,有时以像素,位或字节为单位
    2. 高度通常以像素为单位,有时以像素,位或字节为单位
    3. 每像素位数或像素深度
    4. 以字节为单位的图像大小:numPixelsWidth * numPixelsHeight *(每个像素的(位或字节))
    5. 颜色类型: - 每个像素都有可以变化的颜色数据
      • 灰度
      • 调色板
      • Color RGB
      • Color RGBA
      • 可能的其他人
  • 如果存在使用哪种编码和编码的压缩
  • 实际图像数据

一旦了解了这个基本结构,一旦您了解了正在使用的文件结构的规范,就可以更轻松地解析图像文件。当您知道要读入包含所有头和块的文件指针的字节数时,您可以将文件指针前进到将读入或写出所有像素(颜色)数据的数据结构。在许多情况下,像素数据通常是每像素24位,使得每个通道RGBA - 红色,绿色,蓝色和Alpha每个是8位,或者是与无符号字符相同的一个字节。这以结构或二维阵列表示。无论哪种方式,一旦您了解文件的结构并知道如何读取实际图像或颜色数据,您就可以轻松地将其存储到单个数组中。那么你从那里做什么取决于你的应用程序的需求。