文章目录

  • 图形文件准备 ( PNG 文件 )
  • PNG 文件信息分类
  • 数据块结构
  • IHDR 数据块 简介
  • IHDR 数据块 结构

图形文件准备 ( PNG 文件 )

分析的文件准备 :

  • 1.创建文件 : 在 Photoshop 中创建一张 2x2 的白色图片 , 下面开始分析该图片的结构 ;
  • 2.下面是创建图片时设置的参数 :
  • 3.二进制信息查看 : 使用二进制查看器打开该文件 , 可以看到如下文件的二进制信息 :

PNG 文件信息分类

PNG 二进制文件中的数据分类 :

  • 1.PNG 图片标志信息 : 开始的 8 个字节 , 表示该文件是一个 PNG 图片文件 ;
//PNG 图像文件头信息
89 50 4E 47 0D 0A 1A 0A

  • 2.PNG 图片数据信息 : PNG 图片的内容主要是靠数据信息进行描述的 , 为了描述各种数据信息 , 定义了很多数据块种类 ;

    • ① 关键数据块 : 关键数据块是必不可少的数据块 ;

      • 1> IHDR 数据块 : 文件头数据块 , 描述文件的相关信息
      • 2> IDATA 数据块 : 图像数据块 , 存储图像的具体的像素颜色数据
      • 3> IEND 数据块 : 图像结束数据块 , 是 PNG 文件的最后一个数据块 ;
      • 3> ⋯\cdots⋯ 数据块类型有很多种此处不再详细说明名 ;
    • ② 辅助数据块 : 该类型数据块是可选的 ;


数据块结构

数据块结构 : 每个数据块由 4 部分组成 :

  • 1.Length ( 长度 ) : 大小 4 字节 , 数据块的长度 , 取值范围 [0,231−1][0, 2^{31} - 1][0,231−1]
  • 2.Chunk Type Code ( 数据块类型码 ) : 大小 4 字节 , 数据块的类型由 A~Z 和 a ~ z 等 4 个 ASCII 编码的字母组成 ;
  • 3.Chunk Data ( 数据块数据 ) : 大小是在 Length 中设置的大小 , 存储对应类型的数据 ;
  • 4.CRC ( 循环冗余监测信息 ) : 大小 4 字节 , 全称 cyclic redundancy check , 对 Chunk Type Code 和 Chunk Data 进行计算得到的 , 用来校验数据完整性 ;


IHDR 数据块 简介

IHDR 数据块简介 :

  • 1.IHDR 数据块作用 : 文件头数据块 , 存储图像数据的基本信息 , 是 PNG 文件的第一个数据块 , 该类型数据块只能有一个 ;

  • 2.数据块大小 : 该数据块由 13 字节组成 , 分为 7个部分 ;


IHDR 数据块 结构

IHDR 数据块 结构 :

  • 1.Width ( 宽度 ) : 4 Bytes , 图像的宽度 , 单位 : 像素 ;
  • 2.Height ( 高度 ) : 4 Bytes , 图像的高度 , 单位 : 像素 ;
  • 3.Bit depth ( 位深度 ) : 1 Byte , 图像深度 ; 下面是位深度的取值范围 :
    • ① 真彩色图像 : 8 位 , 16 位 ;
    • ② 灰度图像 : 1 位 , 2 位 , 4 位 , 8 位 , 16 位 ;
    • ③ 索引彩色图像 : 1 位 , 2 位 , 4 位 , 8 位 ;
  • 4.ColorType ( 颜色类型 ) : 1 Byte , 下面是可取值的范围和意义 :
    • ① 类型 0 : 灰度图像 ;
    • ② 类型 2 : 真彩色图像 ;
    • ③ 类型 3 : 索引彩色图像 ;
    • ④ 类型 4 : 带 α\alphaα 通道数据的灰度图像 ;
    • ⑤ 类型 6 : 带 α\alphaα 通道数据的真彩色图像 ;
  • 5.Compression method ( 压缩方法 ) : 1 Byte , 使用 LZ77 压缩算法 ;
  • 6.Filter method ( 滤波器方法 ) : 1 Byte ;
  • 7.Interlace method ( 扫描方法 ) : 1 Byte , 可取值的选择 :
    • ① 方法 0 : 非隔行扫描法 ;
    • ② 方法 1 : Adam7 扫描方法 ( 7遍隔行扫描方法 ) ;


【Android 应用开发】Paint 滤镜原理 之 图像结构 ( 图片文件二进制分析 | PNG文件结构 | 数据块结构 | IHDR 数据块详解 )相关推荐

  1. [免费专栏] Android安全之数据存储与数据安全「详解」

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  2. 【Android 文件管理】分区存储 ( 修改与删除图片文件 )

    文章目录 一.分区存储模式下使用 MediaStore 修改图片 二.分区存储模式下使用 MediaStore 删除图片 三.相关文档资料 Android 分区存储系列博客 : [Android 文件 ...

  3. 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解...

    salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解 建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema ...

  4. 如何开发优秀的HTML5游戏?-迪斯尼《寻找奥兹之路》游戏技术详解(二)

    (接上文)桌面游戏通常创建于一个核心的物理引擎.因此,要在3D世界中模拟一个柔软的物体,需要一个完整的物理模拟器,并且建立一种可信的行为. WebGL和JavaScript还不能奢华到可以运行一个完全 ...

  5. 【Android 应用开发】Paint 滤镜原理 之 颜色矩阵 ( 颜色模式 | 颜色通道 | 颜色矩阵 | 矩阵运算 | 矩阵乘法 | 矩阵加法 | 颜色矩阵深入解析 )

    文章目录 颜色模式 颜色通道 Android 中的颜色矩阵 矩阵乘法运算 滤镜中的矩阵乘法运算 矩阵加法运算 滤镜中的矩阵乘法运算 滤镜运算原理 ( 总结 ) 实际滤镜理论示例 颜色模式 颜色模式 : ...

  6. Android内核开发:系统编译输出的镜像文件

    本文是<Android内核开发>的第四篇文章,主要介绍一下源码编译输出的几个重要的镜像文件,这里把bootloader源码和Linux内核源码的编译输出也算在其中,因为毕竟Android系 ...

  7. view_video.php,android,_Android开发,使用ViewVideo无法播放mp4文件?,android - phpStudy

    Android开发,使用ViewVideo无法播放mp4文件? 新手学习Android开发,参考书为<第一行代码>,关于视频播放那一段一直调试不过去.播放视频一直有个错误,在google里 ...

  8. 【Android游戏开发之六】在SurfaceView中添加组件!!!!并且相互交互数据!!!!

     李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接:  http://www.himigame.com/android-game/306.html 很多童鞋说 ...

  9. 对Android手机系统日历数据增删改查操作详解

    Android手机系统日历数据增删改查详解 前段时间需要开发提取手机系统的日历数据的功能,自己开始研究了一下,刚开始还是比较懵逼的,经过仔细研究还是能够完全贯通了. 如果不想细细研究,可以直接下载我的 ...

最新文章

  1. 《中国式方案秘籍(上部)》
  2. Nexus Repository Manager 3.0 发布
  3. Scrapy框架的日志信息与配置信息
  4. mysql导出excel命令,在命令行导出MySQL数据到excel表
  5. XML的介绍和PHP对XML的应用
  6. minecraft_MineCraft和堆外内存
  7. 将数组存入mysql数据库,将数组值写入mysql数据库
  8. android文本复制自定义剪切板,android 剪切板-文本复制、粘贴
  9. 北美KubeCon新风,正把K8S魔力带向边缘计算
  10. 毕业设计论文选题系统系统用例图_基于Web的毕业论文管理系统的设计与实现
  11. linux7网卡启动的过程,linux网络启动
  12. 新型 Linux 病毒,脚本超 1000 行,功能复杂
  13. 图片切换ajax,jQuery AJAX全屏图文幻灯切换
  14. linux考试试题及答案填空题,Linux认证考试试题及答案(20210511022419)
  15. Python 爬取表情包并保存在数据库中(以往的爬虫改进)
  16. win10浏览器闪退_Edge浏览器闪退怎么解决 Edge浏览器闪退修复方法大全
  17. oracle元转换为万元,Excel表格中快速实现元转换成以万元显示的方法
  18. 互联网大厂的如厕自由
  19. 【AGC004E】Salvage Robots【动态规划dp】
  20. 【机器学习入门】决策树算法(四):CART算法(Classification and Regression Tree)

热门文章

  1. ASP.NET 2.0 – 如何巢状化GridView控件
  2. Mac怎么刷新DNS缓存
  3. JVM----Java内存区域
  4. StringUtils详解
  5. C# 操作 Database(Access SQL)
  6. 关于mysql的表名/字段名/字段值是否区分大小写的问题
  7. fckeditor 数据库 取值 显示
  8. 进程间通信(一)管道
  9. TCP/IP协议基础
  10. API接口通讯参数规范