铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 4326|回复: 7

[通用] PIC文件结构解释

[复制链接]
发表于 2011-11-21 14:41 | 显示全部楼层 |阅读模式
本帖最后由 winson7891 于 2011-11-21 20:20 编辑

鉴于有些MOD用PIC图,前传MOD以后估计会越来越多
说说文件结构吧,好方便以后讨论

开始:

1. 首先要明白,前传中所用的PIC格式文件格式如下:

以上是某个PIC文件的内存数据
内存请用UE打开,关于UE,由于是收费软件,盗版软件链接不提供

蓝色高亮的范围,4字节,位于文件开头,是指这个PIC文件里面的贴图数, 0F 00 00 00,换算成十进制就是16,所以本个PIC文件共16副贴图,所有贴图都是PNG或者JPG

以下例子是PNG:

然后

接下来的部分是对应16副贴图的结束的内存位置数值,16副贴图就16个,如果有32副贴图,那就有32个数值

接下来,就是关于第一幅贴图的数据:

接下来高亮部分是8字节,前4字节是X偏移,后4字节是Y偏移,图里面的数据说明,这个PIC文件的第一幅贴图是X偏移51,Y偏移0

后面的部分(没有完全显示)

就是整个完整的PNG图片,有认识PNG的可以看到,连头文件都没有去掉, 89 50 4E 47 0D 0A 1A 0A 就是完完整整的PNG头文件

总结:
所谓的PIC文件,就是把复数副PNG或者JPG贴图堆叠在一起,
对于PNG,每幅贴图的XY偏移保存在每幅PNG贴图前面,
对于JPG,每幅贴图前面4字节保存是否使用黑背景(0或1)(感谢真正的强强提供)

就是这么一个贴图资源文件
结构简化
4字节:贴图数
4*贴图数字节:每幅贴图结束内存位置
8字节:第一幅贴图的XY偏移(如果是PNG)
若干字节:第一幅PNG贴图的具体数据(大小看前面)
4字节:第二幅贴图是否使用黑背景(如果是JPG)
若干字节:第二幅JPG贴图的具体数据(大小看前面)
……
……
依此类推,直到所有贴图堆放完毕


以上



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-11-21 18:30 | 显示全部楼层
本帖最后由 真正的强强 于 2011-11-21 18:32 编辑

乌鸦大大辛苦了!!不过有个问题,其实宽高之后还有4字节表示“是否黑色背景”,只有0和1两个值。pic文件里实际也有jpg图片的。

评分

参与人数 1声望 +5 收起 理由
winson7891 + 5 哦感谢提醒~因为我个人不用PIC,还真没注意.

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-11-25 23:01 | 显示全部楼层
本帖最后由 KA 于 2011-11-25 23:02 编辑

当年写的pic代码,放在前传版块里也没人看还不如开光

原型
  1. struct PicFile()
  2. {
  3.     int32   count;  //整个Pic的帧数
  4.     int32[] Address;//每一张图的结束地址
  5.     Pic[]   image;  //每一张图的数据
  6. }

  7. struct Pic()
  8. {
  9.     int32  x;       //本帧图的x偏移
  10.     int32  y;       //本帧图的y偏移
  11.     int32  black;   //本帧图是否黑色底
  12.     byte[] data;    //本帧图的数据
  13. }
复制代码

  1. Public Sub LoadKGPicFile(filename As String)
  2. Dim idnum As Integer
  3. Dim PersonNum As Long
  4. Dim filenum As Long
  5. Dim i As Long
  6. 'Dim idx() As Integer
  7.     filenum = OpenBin(filename, "R")‘pic
  8.         Get filenum, , KGoffsetNum
  9.         ReDim KGoffset(KGoffsetNum)
  10.         KGoffset(0) = KGoffsetNum * 4 + 4'第一个png偏移指针位置
  11.         For i = 1 To KGoffsetNum
  12.             Get filenum, , KGoffset(i)'获得偏移
  13.         Next i
  14.     Close (filenum)

  15. NewHeadNum = KGoffsetNum
  16. End Sub

  17. Public Function DrawPng(filename As String, Offset As Long, picbox As Object, background As Object, x As Long, y As Long)
  18.         pngClass.picbox = picbox '图片框
  19.         pngClass.SetToBkgrnd True, x, y '是否设置背景(True 或者 false), x 和 y 坐标
  20.         pngClass.BackgroundPicture = background '背景图
  21.         pngClass.SetAlpha = True 'Alpha 通道透明
  22.         pngClass.SetTrans = True '透明
  23.         pngClass.OpenPNG filename, Offset
  24. End Function
复制代码

点评

VB源码,非PASCAL  发表于 2011-11-25 23:50

评分

参与人数 1声望 +5 收起 理由
winson7891 + 5 乐于助人

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-11-29 16:38 | 显示全部楼层
本帖最后由 蓝烟清 于 2011-11-29 17:22 编辑

pic了解一点了,金前大部分都是pic,等会去试试

额,能不能再说说 grp和idx的文件结构
smp和sdx我都没能读出来

接下来高亮部分是8字节,前4字节是X偏移,后4字节是Y偏移,图里面的数据说明,这个PIC文件的第一幅贴图是X偏移51,Y偏移0
不对啊,我用强强的Upedit看到的pic,偏移是x=62 y=51 。 应该 3E 00 00 00  33 00 00 00 这八位是偏移

0F是15,不是16, 难怪。结构没有错, 按15算就对了



另外内存位置数值是什么意思,第一个贴图C2 01 00 00,怎么样知道它的内容结束位置在哪里
是不是这样,C2 01  00 00   , C*16 + 2 + 1*16*16 =  12*16 + 2 + 1 * 16 * 16 = 450 。 总共需要偏移450个字节结束第一个贴图, 而第一个贴图的起始位置是 4 + 4 * 贴图数 = 4 + 4 * 15 = 64

点评

那个450直接是结束位置,不是长度啊大哥~所以结束就是在450那里~  发表于 2011-11-29 20:35
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-11-29 20:58 | 显示全部楼层
老的文件结构版面里有

点评

翻了好几页,找到了场景文件和场景事件文件的说明。 没找着其它文件结构,在哪个版块呢  发表于 2011-11-29 23:02
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-11-29 23:17 | 显示全部楼层

点评

我已经有点眉目了。 感谢weyl  发表于 2011-11-30 00:00
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-3-11 14:12 | 显示全部楼层
哦噶,表示没看懂……
好难……
还是像素有爱……
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-7-14 15:36 | 显示全部楼层
顶起来,因为我们也在研究pic结构的模型数据
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-5-18 18:59

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表