文档章节

点九图文件(PNG)解析

David_Lee_
 David_Lee_
发布于 2018/11/26 11:55
字数 389
阅读 36
收藏 0

前情提要

在很久之前点九图还有两条黑边,那时候写了一个解析的demo:
iOS_NinePatch

后来黑边没有了,问安卓的同事,说是“编译”过了。具体是怎么“编译”的,他们也不知道,于是事情就这样搁置了一年左右。

直到不久前,需要用到一些图片拉伸和内容区域限定,实在是羡慕安卓的点九图不需要单独写配置项,于是决定解决这个问题。

技术要点

通过阅读Android源码,发现下面几点:

  • 信息保存在一个叫npTc的png chunk里
  • 使用Res_png_9patch 这个结构来读取和验证点九图的信息。

文件分析

通过iHex读取素材:
iHex读取

结合PNG Metadata的文档,获取整个npTcchunk的数据,对比Res_png_9patch 结构:

npTc chunk:
0000003C # length
6E705463 # npTc
00 # wasDeserialized
02 # numXDivs
02 # numYDivs
03 # numColors
20000000 # *xDivsz
28000000 # *yDivsz
0000013F  # paddingLeft
00000044 # paddingRight
0000003D  # paddingTop
00000039  # paddingBottom
30000000 # *colors
0000013F  # stretch left
00000147 # stretch right
00000000 # stretch top
0000009C # stretch bottom
00000001 00000001 00000001 E4042807 
00002000 # CRC

至此,文件结构分析完成,读取比较简单不做赘述了。

相关材料

相关文档:
The Metadata in PNG
NinePatch.cpp

工具:
iHex

素材:
“编译”后的点九图

© 著作权归作者所有

David_Lee_

David_Lee_

粉丝 23
博文 7
码字总数 3004
作品 0
武汉
程序员
私信 提问
android 制作.9.png图片

本文转自:http://xiaoming123123.iteye.com/blog/1489253 “点九”是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png 智能手机中有自动横屏的功能,同一幅界面会在随...

长平狐
2012/08/28
9.2K
0
android美化之 “点九”

一、“点九”是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png 智能手机中有自动横屏的功能,同一幅界面会在随着手机(或平板电脑)中的方向传感器的参数不同而改变显...

虫虫
2011/12/26
513
0
Genesis-3D新手入门——7贴图的导入

贴图的导入 贴图就是模型的衣裳,它让游戏场景看起来更加真实,把一个满是模型的世界变得生动。 1.在工程面板下点击"导入"按钮。 2. 找到你要导入的贴图文件,点击"打开"。 3.导入后,你的贴...

lengche
2013/12/18
93
0
Java点九图片解析--NinePatch

关于JavaSE NinePatch JavaSE NinePatch是一款针对Swing和JavaFX对点九图片解析的一种实现方式 关于点九 点九图又称九图,是一种png格式的图片,其后缀为.9.png,其与传统png图片不同的地方是...

freeseawind
2016/07/11
977
0
Android .9.png图片的处理

android平台有多种不同的分辨率,很多控件的切图文件在被放大拉伸后,边角会模糊失真,在android平台下使用点九PNG技术,可以将图片横向和纵向同时进行拉伸,以实现在多分辨率下的完美显示效...

恰同学少年
2015/07/28
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
5
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部