IDAT PNG块,第一个字节意外,我在哪里错了?

时间:2017-04-12 13:32:38

标签: algorithm graphics png deflate inflate

我创建了一个3种不同颜色的png 3x3和1种2x2黑白用于测试目的。

基本上我已经能够将字节的所有位分配到它们各自的Chunk中的特定角色,但是IDAT(不是意外的)。

IDAT类型声明后的第一个字节是二进制8格式的以下内容:

00011000

基本上,在线文档之后:

0001应为CM = 1 1000应该是CINFO = 8

但我希望找到1000(= 8)作为CM(png的标准压缩方法)。

我哪里错了?这里是完整的数据流。

在理解了这一部分之后,我将在一个尚未构建的软件中实现INFLATE / DEFLATE算法。

这里是IDAT Chunk的完整数据流 的数据流中:

000110000101011101100011111110000000111100000100000011000000110000100000111010101111111101111111
0000000000111000110101000000100011111000

1 个答案:

答案 0 :(得分:1)

已在评论中回答,但正如document you are reading中所述(它有助于阅读整篇文章):

  In the diagrams below, we number the
  bits of a byte so that bit 0 is the least-significant bit, i.e.,
  the bits are numbered:

     +--------+
     |76543210|
     +--------+

您不需要“在软件中实现INFLATE / DEFLATE算法”,因为zlib已经为您完成了。