关于DNF的多媒体包NPK文件的那些事儿(7) - IMGV5
IMGV5是IMG结构的第五个版本。在所有IMG版本中,IMGV5是最另类的,与其他版本不同,IMGV5采用DDS方案而非像素点阵方式存储数据。DDS是纹理压缩图像文件,广泛应用于模型设计,系统可以通过Direct3D直接读取这些文件,并且内存消耗比其他的图像文件小。IMGV5普遍被各种人物、怪物技能特效所采用,某些物品贴图也使用IMGV5存储。
IMGV5包含两个表,其中一个表包含了DDS图片的信息,称为DDS索引项,另一个则是与其他IMG版本一样作用的普通索引项,尽管IMGV5所使用的索引项占据空间更大。
IMGV5内的图像数据文件数目等于DDS索引项数,而并非等于普通索引项数,其中每个图像数据均由一个完整的DDS文件经过ZLIB压缩后获得。解压后的DDS文件无需任何辅助可以直接通过转换算法转化为一个点阵图像(因为这个DDS文件内部也有自己的结构,不像点阵图像只存储点阵,尺寸和颜色信息依然需要IMG的索引项给出),DDS索引项的用途无非就是定位压缩前的图像数据在IMG文件的位置而已,仅起到便利性而非决定性作用。而普通索引项包含的信息除了其他IMG所应有的信息(图像长度并不包含因为已经不需要了)之外,还包含了引用DDS的序号以及两个坐标点;这是由于DDS图像解出来后一般是个大图像(如下图所示),而真正的贴图帧根据DDS的序号确定使用哪个DDS图像,并通过两个坐标点来确定该贴图属于这个大的DDS图像中的哪个区域。这样,根据对大图像的裁切,就能获得该贴图帧真正的图像了。
DDS大图像,红色区域的位置是由DDS引用型索引项内独有的IMGV5参数确定的
绝大部分IMGV5所包含的图片数据都是DDS数据,但有极少数的IMGV5也包含普通的点阵数据,例如“sprite_map_chn_battleship_npc.NPK”(目前仅发现一个特例)内的三个IMGV5文件。这个时候IMGV5依然包含两个表,但DDS索引项为空,而普通索引项的格式则与其他版本IMG的索引项相同,这里的索引项中颜色格式与IMGV2相同。
另外,IMGV5文件中依然包含一个类似于IMGV4的调色板的信息,但是该信息在IMGV5中没有任何用途。在绝大部分的IMGV5文件中该调色板的颜色项数为0,也就退化成一个全零双字;但仍有极少数的例外,例如“sprite_map_infernomode.NPK”(也是仅发现一个特例)中的几个IMGV5依然保留着带有颜色项的调色板信息,尽管这些信息没有任何用途。
文件头 |
16字节字符串(注意空格)“Neople Img File ” |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
索引表大小 |
4字节,索引表所占空间。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
保留 |
4字节,为0。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
版本号 |
4字节,IMGV5文件结构中的版本号为5。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
索引表数目 |
4字节,索引表的表项(主要是DDS引用型,部分也包括指向型和图片型) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DDS索引项数目 |
4字节,DDS图片的数目 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IMG文件大小 |
4字节,整个IMG文件的大小(不知道有啥用) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
调色板数据 |
首4字节为调色板所包含的颜色数目,之后的4×颜色数目个字节则为具体数据。该数据块在IMGV5中无用,绝大部分IMGV5该字段退化成1个双字,即零,但有些IMGV5还是存在调色板数据的。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DDS索引表 |
DDS索引项1 |
由若干个DDS索引项构成,每个DDS索引项28字节,用于存储DDS图像的信息。 该数据可用于查找DDS图片在文件中的位置,或者在制作EX的时候起到指示和显示作用,但DDS文件解析不依赖于该数据。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DDS索引项2 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DDS索引项3 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
…… |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
索引表 |
索引表项1 |
由若干个索引项构成。索引项包括3种,DDS引用型,指向型和图片型。图片型存储对应图片的各种信息,指向型只存储一个数据,即所指向的图片的帧号。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
索引表项2 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
索引表项3 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
索引表项4 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
…… |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
贴图数据 |
图像数据块1 |
由首尾相接的图像数据块构成。 由于大部分图像数据由ZLIB进行压缩,因此经常以“0x78 0x9C”数据开头(但不可以其为标准作为图像数据块的起始点)。 IMGV5图像数据里大部分都是DDS数据,分别对应DDS索引项,而普通索引项中的DDS引用型索引项不对应任何图像数据,点阵型图片索引项对应的点阵图像数据位于DDS数据之后,指向性索引项不对应任何图像数据。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
图像数据块2 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
图像数据块3 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
…… |
IMGV5图像数据均为DDS图像,后续会逐渐介绍DDS图像的格式,当然,只会介绍DNF里用到的,详情也可以查看MSDN:https://msdn.microsoft.com/en-us/library/windows/desktop/bb943990(v=vs.85).aspx
IMGV5文件采取纹理压缩,因此较难对其进行编辑,一般将其转化为IMGV2进行编辑。IMGV5文件的好处是节省系统资源消耗,节约内存,但不意味着IMGV5文件的存储空间会变小,并且将其他贴图转化成IMGV5后会丢失一些颜色信息和ALPHA通道信息,因此将补丁或者其他贴图资源以IMGV5形式发布不是一种值得推荐的做法,除非IMGV5是DNF唯一能够读取的版本。
关于DNF的多媒体包NPK文件的那些事儿(7) - IMGV5相关推荐
- linux软件安装之详解apt、yum、dnf 和 pkg包安装
介绍 包管理系统除了安装软件外,它还提供了工具来更新已经安装的包.包存储库有助于确保你的系统中使用的代码是经过审查的,并且软件的安装版本已经得到了开发人员和包维护人员的认可. 在配置服务器或开发环境时 ...
- 解决springboot读取jar包中文件的问题
解决springboot读取jar包中文件的问题 参考文章: (1)解决springboot读取jar包中文件的问题 (2)https://www.cnblogs.com/songxiaotong/p ...
- 【Android 热修复】热修复原理 ( 修复包 Dex 文件准备 | Dex 优化为 Odex | Dex 文件拷贝 | 源码资源 )
文章目录 一.修复包 Dex 文件准备 二.Odex 优化 三.Dex 文件拷贝 四. 源码资源 一.修复包 Dex 文件准备 异常代码 : 故意写一个异常代码 , 并执行该代码 , 肯定会崩溃 ; ...
- ear包目录_Java中的JAR/EAR/WAR包的文件夹结构说明(转)
JAR包:打成JAR包的代码,一般作为工具类,在项目中,会应用到N多JAR工具包. WAR包:JAVA WEB工程,都是打成WAR包,进行发布,如果我们的服务器选择TOMCAT等轻量级服务器,一般就打 ...
- linux查看jar包内容命令,【达内Java教程】用linux查看jar包内文件命令
深圳java培训(sz.java.tedu.cn)专家教你用linux查看jar包内文件命令 jar vtf fileName.jar 用法: jar {ctxui}[vfm0Me] [jar-fil ...
- 读取jar包所在目录和jar包内文件
在网上查找了很多关于读取jar包的相对路径资料,但是大多都是读取jar包内文件的方法介绍,甚至有人将读取包内路径的方法混淆为读取包外路径的方法.经过本人亲自的测试,对于两种读取文件的方 ...
- war包里面文件的修改方式
war包里面文件的修改方式 1 将war包移动到一个干净的路径下,使用 jar xvf ROOT.war 命令将war进行解压操作 2 修改相应的文件内容,修改想要修改的文件,比如web.xml 3 ...
- python读取压缩文件的大小_python查看zip包中文件及大小的方法
python查看zip包中文件及大小的方法 本文实例讲述了python查看zip包中文件及大小的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python import ...
- java jar包资源文件_深入jar包:从jar包中读取资源文件
我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等).在单独运行的时候这些简单的处理当然不会有问题.但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了.看看 ...
- 2-SII--应用本包下文件写入和读取
零.先说一下我的IO小工具方法: 1.IO读写: IO.png 2.读取InputStream /*** 读取InputStream** @param is 输入流* @return 流转化的字符串* ...
最新文章
- 雷军22年前写的代码 你见过吗?
- Java 基础总结。
- scala函数定义示例
- Package name must have at least two identifiers 解决办法
- 属于PHP语言结构的是,PHP语言结构
- openstack quantum搭建过程中一些有用的链接
- 编译内核_将驱动编译进内核(Kernel)的步骤记录
- THINKPHP增删改查--(改)
- spring mvc学习(27):处理数据模型--从表单到controller传输数据续
- 设置窗口的光标,设置ToolBar,设置状态栏
- pytorch使用说明2
- HDU 2686 MCMF
- 笔记(八)Jetson Nano 跑通 jetson-inference
- stm32c6t6硬件iic接口的使用--以0.96寸oled为例
- 我的一点企业上云经验
- Android自定义输入法软键盘
- Openwrt无线和有线基本配置方法以及luci管理界面安装
- 2005计算机885编程题
- 聊聊使用 JavaScript 做动画出现卡顿的原因
- Winform ERP系统 漂亮图标下载网站|C/S框架网
热门文章
- vs2008的永久破解安装
- php仿微信界面设计,仿微信源码-泡泡IM
- 全国大学生数学建模竞赛2016A题系泊系统的设计MATLAB程序
- 【威联通Nas】安装docker版本的wiznote/wizserver
- 实对称矩阵的特征值求法_“绝境之下”,如何求解矩阵的特征值?
- ab st语言编程手册,PLC编程语言,ST语言秒杀梯形图编程之浮点数计算
- AE插件自动创建图层工具LayerGenerators使用教程
- 【Allwinner】---搭建 全志平台 开发环境 史上最详细
- Hexo博客开发之——theme主题备份上传失败
- 前端实战——实现购物车功能