首页
社区
课程
招聘
[已解决]图片解析(一)
发表于: 2009-3-14 17:13 8850

[已解决]图片解析(一)

2009-3-14 17:13
8850

困扰很久的问题...

一游戏依赖的文件,里面存了大量的图片...因为好多图片都使用一个调色板,所以调色板只存了几个...对于普通的图片,数据流长度是width*height,很容易被解析出来,但这个文件里还有其他好几种格式,却看不懂.
0000148ch: 43 52 50 53 00 00 00 0C B5 F7 01 00 F4 1C 00 00 ; CRPS....调..?..
这是一个图片的定位方法.
第一个DWORD,是ASCII标识
第二个DWORD,如果是00000000话,是普通图片,如果是0000000C的话,就是我下面需要解析的图片...
第三个DWORD,是该图片所依赖的调色板在文件中的偏移量
第四个DWORD,是该图片开始位置在文件中的偏移量

图片:
第一个DWORD,是宽,第二个DWORD,是高,其后是数据.
0F 00 00 00 17 00 00 00 03 00 82 D8 58 04 00 83 E7 D5 58 05 00 84 E7 DB D5 58 06 00 85 E7 DB C3
D8 58 08 00 87 E7 D8 C3 C8 D5 B7 58 09 00 88 E7 D5 C8 C8 C8 CA C3 58 0A 00 89 E7 D5 C8 C8 C8 C8
C8 C8 B7 0C 00 8B E7 CA C8 C8 C8 C8 C8 C8 C8 C8 58 0E 00 8D E7 CA CA CA CA CA CA CA CA CA CA B5
58 0F 00 8E E7 CA CA CA CA CA CA CA CA CA CA CA C3 58 10 00 8F E7 CA D5 D5 D5 C4 55 55 55 50 50
50 50 50 38 10 00 8F E7 D5 D5 D5 C9 7A 29 1A 1A 1A 1A 1A 1A 1A 1A 10 00 8F E7 D5 D5 D5 91 37 18
17 17 17 17 17 17 18 18 10 00 8F E7 D8 D8 CB 6D 30 18 17 17 17 17 17 17 17 18 10 00 8F E7 D8 CE
6F 31 30 17 17 17 17 17 17 17 17 17 07 00 86 E2 D6 90 37 30 30 06 00 85 E0 92 6C 30 30 06 00 CE
6F 31 30 30 05 00 84 7A 32 30 30 04 00 83 37 30 30 03 00 82 30 30 03 00 82 30 30 02 00 81 30

数据长度不等于宽*高,但看起来很有规律,因为一些XX 00的数据,个数正好是图片高度,且其后的数据长度正好等于他,且数据里没有00数据...根据规律看也不是RLE压缩格式..如果去掉XX 00这些数据后,数据长度也小于宽*高.看似象压缩格式,但数据里重复的还很多.这个问题困扰我一年了,不知大家看到过这种格式的图片格式吗?只需告诉我规律,我会自己编程来解析的...
声明:我确定是这是图片数据...因为游戏采用DIRECTX技术,无法动态跟踪到这里,要不早解出来了...


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (16)
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
终于用双显示器实现了这个游戏的跟踪,通过跟踪发现,这是一种原始的透明图片的压缩方法。现将解析过程写出来和大家分享一下。

    因为透明图片的透明色只有一种,且可能在图片中大量存在,所以作者把这个色给舍掉了。所以图片的容量大大减小,而不是现有的压缩方法,将重复数用特殊标志来压缩。

   1、前两个DWORD为源图片宽高;
   2、数据第一个WORD为行开始,表示该行现有的BYTE数,并不是处理后的BYTE数。
      如果这个数为00 00,表示该行全是透明色,需要我们用透明色来填充,通过观察发现数据中无00数据,所以该色就是透明色了,我们可以用源图片宽数的00来填充,同时源行数加1。
   3、数据开始,数据中不允许出现00,(透明色嘛),第一个BYTE为标志位,分两种情况:
   1)如果<=0x7F,则表示要跳过多少个BYTE,即处理时需要你用多少个00来填充。
   2)如果>0x7F,则表示其后的数据为源数据,数据的长度为该BYTE & 0x7F,即减去0x80,不信大家可以演算一下。
   处理完后,如果不到行尾,则重复1)、2)步,如何判断呢?当然是该行生成的BYTE数和源图片的宽来比较。如果到行尾,生成的BYTE数小于源图片的宽度,后面补00。
   4、如果行数==源图片的高,则处理结束。

举例:
03 00 82 D8 58
04 00 83 E7 D5 58
05 00 06 83 E7 DB D5

   D8 58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
   E7 D5 58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
   00 00 00 00 00 00 E7 DB D5 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

   dwWidth  dwHeight  wSize (bFlags bits ...) wSize ....
2009-3-17 05:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
很高深的问题,学习学习!
2009-3-17 07:55
0
雪    币: 210
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
楼主研究这个有什么用啊
2009-3-17 12:30
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
说起来你也许不信,我想把图片解析出来,知道文件结构后,来汉化。因为字符在这个游戏里也是一个个的小图片。再则我想重编该游戏。
2009-3-17 14:40
0
雪    币: 235
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
好!支持汉化游戏!
2009-3-17 15:28
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
顶一下,以帮助图片解析(二)
2009-3-18 17:31
0
雪    币: 213
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
。。。。。汉化图片。。让我想到了zoomit
2009-3-18 17:35
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
附一张解析出来的图片:
上传的附件:
2009-3-25 23:44
0
雪    币: 200
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
呵呵,汉化 ,支持一个!
2009-3-26 08:59
0
雪    币: 563
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
重编该游戏 真厉害
2009-3-26 12:09
0
雪    币: 270
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
第一次看到,不错。赞一下
2009-3-26 14:17
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
这其实是在挖掘游戏真正的处理过程...图片都找出来了,但文件中还定义了精灵的结构...如向左走,由哪几个图片构成...向右走...发弹...静态自发动作...等等...我想大部分的游戏都是这样设计的...所以搞清了这一种,其他的就不是什么难题了...
2009-3-27 16:45
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
楼上很强嘛。。有自己的想法。。。
2009-3-27 17:05
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
不过这里好象搞游戏的并不多...
2009-3-28 10:33
0
雪    币: 222
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
16
这样反是不是难了点
2009-3-28 21:20
0
雪    币: 203
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
欢迎到ChinaAVG汉化区来交流游戏汉化技术。

http://www.chinaavg.com/thread.php?fid=20
2009-3-29 00:06
0
游客
登录 | 注册 方可回帖
返回
//