algorithm - IDAT PNG block ,第一个字节意外,我哪里错了?

标签 algorithm graphics png deflate inflate

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

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

IDAT 类型声明后的第一个字节为二进制 8 格式:

00011000

基本上,遵循在线文档:

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

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

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

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

这里是 IDAT block 的完整数据流 数据流:

000110000101011101100011111110000000111100000100000011000000110000100000111010101111111101111111
0000000000111000110101000000100011111000

最佳答案

已在评论中回答,但如 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 为你完成了。 .

关于algorithm - IDAT PNG block ,第一个字节意外,我哪里错了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43371082/

相关文章:

objective-c - 内存中PNG无损压缩为NSData?

Python PIL - 不透明度 > 0 的所有 PNG 区域都将其不透明度设置为 1

delphi - XE7 FMX 损坏的 PNG 缩略图

algorithm - 检测矩形(按钮)是否在 x 或 y 轴上重叠

algorithm - Neatimage 使用哪种算法对图像进行去噪?

c# - 在影响模型的屏幕上书写文本

c++ - 调用 vkCreateGraphicsPipelines 时出现段错误

algorithm - A*算法开表选择

python - 使用最大和给定跨度的最佳解析树

r - filled.contour - 描绘 z 值水平的变化