(推荐)查找与导出T408/T508中的16位BMP图像<作者:LEFE>

lefe

普通会员
2003-06-06
917
0
0
T408与T508在软件结构上基本一致,它们的图像,除了游戏、WAP下载的动画及一些小图标之外,基本上都是16位r5g6b5的BMP格式。我们需要找出其中的图像,并核实地址,下面以以T508行货D1版的AXF文件为例进行说明。(以下叙述中,0x起头或h结尾的数值为十六进制)。

工具软件:1、Hex Workshop英文版(以下简称HW);
     2、Phtoshop7.0中文版(以下简称PS);
     3、Windows计算器(计算十六进制方便)。

  HW比较简单了,PS要稍复杂些。我们先熟悉一下PS,PS的工作区域可以分为以下几个部分:
  1、菜单栏:菜单栏包含执行任务的菜单;
  2、选项栏:选项栏提供使用工具的选项;
  3、工具箱:工具箱中存放着用于创建和编辑图像的工具;
  4、调板窗:调板可帮助您监视和修改图像;

一、做BMP头文件
  1、启动PS,进菜单文件->新建,模式选RGB颜色,确认。
  2、进菜单文件->存储为,选路径,起名,格式选BMP,点保存->选择高级模式->再选择R5 G6 B5格式,确认。这样就做成了一个r5g6b5格式的BMP文件,其中含有相应的文件头。
 

附件

lefe

普通会员
2003-06-06
917
0
0
二、将AXF文件格式化为图像
  1、启动HW,打开AXF文件。选择按16进制查看地址(如下图所示)。T408/T508中的大图一般是128像素宽,一幅128*N像素的图它的像素数据阵列大小为128*N*2=100h*N字节。按Delete删掉结尾的一段,使阵列大小能被100h整除。下图中删掉选定的一段后为734d00h大小。
 

附件

lefe

普通会员
2003-06-06
917
0
0
  2、打开刚才所做的BMP头文件,Ctrl+C复制前面46h长的文件头。再转到AXF文件,光标移到起始位置,Ctrl+V粘贴。然后修改宽、高。图像高为734d00h/100h=734dh,按照倒序的原则,在图中所示位置填入8000 0000 4d73 0000。进菜单File->Save As,起名,后缀名为BMP,确认后,整个AXF文件就被格式化为一幅BMP图像了。
  注意!PS对图像的宽、高有限制的,都不能超过30000=7530h,所以如果一次不能把整个AXF格式化,还需要分几次,分别加上文件头就是了。
 

附件

lefe

普通会员
2003-06-06
917
0
0
三、查找图片地址,确定图片大小
  我们将利用PS的信息调板直接找出图片的地址。转到PS,打开格式化后的AXF图像文件。
  1、进菜单编辑->预置->单位与标尺,将标尺改成像素。进菜单窗口,找到信息,点击选择,调出信息调板。这样我们就在图像上移动光标时,信息调板上会显示光标的坐标值。
  2、由于图像是垂直翻转的,需要倒过来。进菜单图像->旋转画布->垂直翻转画布。
  3、现在的AXF图像,是一长条图,按z键选择选择工具箱中的缩放工具,在图像上单击可放大,按住Alt键单击可缩小。按住空格键可用鼠标左键拖动图像(在大多数情况下都可这样)。这样会看清楚里面的图片。请注意:
  (1)有些图片有错位,这是由于起始地址不是正好能被100h整除而造成。
  (2)一幅动画的所有帧一般是放在一起的,这样只需要查出第一帧的起始地址,及每帧的高度即可。
  (3)有些动画,是分成了固定与可动的两部分,将来在替换时,也要按照这样方式进行。
  4、现在我们将一幅图放大,见图中,注意它是有错位的。按m键选择矩形选框工具,画出一个矩形选框,选框的上下边要与图片上下边恰好吻合,观察右边的信息调板,记下选框的H值,这就是图像的高度了。可以看到,这张图片的高为128像素。注意认准图片的起始像素。
 

附件

lefe

普通会员
2003-06-06
917
0
0
  5、按z键,对着起始像素单击,尽量地放大它。按m键选择矩形选框工具,把十字叉的中心移到起始像素上,观察右边的信息调板,记下像素坐标的X、Y值。按如下公式计算:
    像素地址=(X+128*Y)*2
  这里,起始像素X=66,Y=11851,可算出地址=3033988=0x002e4b84。
  以上查找图片的方法是纯粹基于PS的,在已知图片大小或是索引地址的情况下,也可以直接找到索引再查,但是这种方法是有局限性的。
 

附件

lefe

普通会员
2003-06-06
917
0
0
  四、提出图片,验证图片起始地址
  1、再转到HW,打开AXF文件(不是格式化后的AXF图像),按Ctrl+G,弹出下图中Goto窗口,填入2e4b84,按Go。
  2、进菜单Edit -> Select Block,弹出下图中Select Block窗口,填入8000(图片大小=128*128*2=8000h),按OK。这样就选定了这张图片的像素阵列。
  3、按Ctrl+V复制数据,按Ctrl+N新建一文档,按Ctrl+V粘贴,再打开BMP头文件,复制到新文档的前面,同样地,只要把相应宽、高改为8000 0000 8000 0000,再存为BMP文件即可。下图中可以看到提出的图像是正确的(注意是垂直翻转的)。
  
*****************************
关于换图:
  参照晓春的文章。但请注意:  
  1、在选定文档时,按照上面四中所述方法简单些。
  2、动画的图像都是连续的,因此可以在PS中把动画连成长条,存成r5g6b5格式,去掉46h长的头及结尾的0000,再一起换进去。
  3、如果PS用得熟的朋友,可以有更为大胆的办法换图。就是完全依靠PS7,看看AXF图像中哪张图不顺眼,就把它换掉,要注意错位,要仔细对准,这对PS高手来说,是小菜。然后同样要翻成倒的,另存为r5g6b5的BMP。做完后别忘了把格式化AXF时截掉的尾巴再加上去,并删掉文件头及结尾的0000,AXF修改完成。
 

附件

kunhua_gou

普通会员
2003-06-12
158
0
0
最初由 lefe 发表
  5、按z键,对着起始像素单击,尽量地放大它。按m键选择矩形选框工具,把十字叉的中心移到起始像素上,观察右边的信息调板,记下像素坐标的X、Y值。按如下公式计算:
    像素地址=(X+128*Y)*2
  这里?..

高,实在是高
 

lefe

普通会员
2003-06-06
917
0
0
老实说,这么长的帖帖,就是你提的这一点有价值。:D
 

lxcwcy

普通会员
2003-06-02
120
0
0
lefe兄,所有的图片(连接图片,接电图片、屏保等),在改换时,找到开始地址后都加9000吗?

感谢了。
 

晓春

普通会员
2003-06-01
581
0
0
开关机动画:+9000
搜网:+7000
来电:+5000
拨号:+6200
全都是在开始地址后加,注意是十六进制的,用记算器
 

lxcwcy

普通会员
2003-06-02
120
0
0
OK,太感谢了,我是这么理解的,但不敢换。OK,这次有你的一句话,我就可以大胆的做了。

再次感谢!!!
 

lefe

普通会员
2003-06-06
917
0
0
请注意:如开关机,开始地址+9000h-1才是结束地址。
在选定开关机动画时,先Ctrl+G到开始地址,再进菜单Edit->Select Block,填入9000。这样操作较简单些。
 

lxcwcy

普通会员
2003-06-02
120
0
0
OK,谢谢了“晓春”兄及“lefe"兄了,我已经成功的把开关机等画面换掉。(开关机的是优女写真)