发布WIS原理,通过原理能顺利制作出WIS编辑器
WIS文件内部分三部分
文件头,占用200h 固定大小
200h后是图片像素部分这部分长度未知
图片像素后,是每个图片的偏移,占用长度,和一个预留位置
这三个域都是integer型的,占用4个字节
取到偏移列表的方法是
读入文件,跳转到文件全长-12字符处
向下取
第一个4位为最后一个图片的偏移
第二个4位为最后一个图片的占用长度
第三个4位是预留域,暂时无用,值均为0
得到这三个值后,就可以得到整个图片像素区域的长度
像素区域长度是imagecountsize:=最后一个偏移位置+最后一个图片占用长度
从这个imagecountsize后面,就是整个图片偏移列表区域
可以循环读出整个偏移列表(读到文件的EOF)
得到整个偏移列表后
可以看到,图片从200h开始
第一位是一个是否压缩标识
第二到4位,预留位,暂时没有用到
接下去是一个8字节的空间,存放着4个smallint
分别是
Width,Height,X,Y
WIS的像素分压缩,未压缩与捣乱三种情况
压缩情况是
当图片偏移位置开始的第1位为1时,做解压处理
图片偏移开始的第13位不为0时,做解压处理
解压方法是
取13位的值,做为循环次数
取14位的值,做为像素值
例如:13位的值为10
14位的值为255
那么,WIS的解压过程是
for i:=0 to 9 do
begin
写入像素(255);
end;
压缩方法就是相邻位值相同则叠加,以减少空间占用。
当图片偏移开始的第1位不为1时,则不做解压处理,而是普通的
Width*Height取值
还有一种是捣乱的情况
当图片偏移位置开始的第1位为1时,而图片偏移位置的第13位为0时,这时就开始捣乱
读入第14位值,做为循环次数
然后依次循环读出14位以后的循环次数的顺序像素写入图片。
界此Wis的文件结构与处理方式已经全面告破。
Chatop 2009-11-24日记录
文件头,占用200h 固定大小
200h后是图片像素部分这部分长度未知
图片像素后,是每个图片的偏移,占用长度,和一个预留位置
这三个域都是integer型的,占用4个字节
取到偏移列表的方法是
读入文件,跳转到文件全长-12字符处
向下取
第一个4位为最后一个图片的偏移
第二个4位为最后一个图片的占用长度
第三个4位是预留域,暂时无用,值均为0
得到这三个值后,就可以得到整个图片像素区域的长度
像素区域长度是imagecountsize:=最后一个偏移位置+最后一个图片占用长度
从这个imagecountsize后面,就是整个图片偏移列表区域
可以循环读出整个偏移列表(读到文件的EOF)
得到整个偏移列表后
可以看到,图片从200h开始
第一位是一个是否压缩标识
第二到4位,预留位,暂时没有用到
接下去是一个8字节的空间,存放着4个smallint
分别是
Width,Height,X,Y
WIS的像素分压缩,未压缩与捣乱三种情况
压缩情况是
当图片偏移位置开始的第1位为1时,做解压处理
图片偏移开始的第13位不为0时,做解压处理
解压方法是
取13位的值,做为循环次数
取14位的值,做为像素值
例如:13位的值为10
14位的值为255
那么,WIS的解压过程是
for i:=0 to 9 do
begin
写入像素(255);
end;
压缩方法就是相邻位值相同则叠加,以减少空间占用。
当图片偏移开始的第1位不为1时,则不做解压处理,而是普通的
Width*Height取值
还有一种是捣乱的情况
当图片偏移位置开始的第1位为1时,而图片偏移位置的第13位为0时,这时就开始捣乱
读入第14位值,做为循环次数
然后依次循环读出14位以后的循环次数的顺序像素写入图片。
界此Wis的文件结构与处理方式已经全面告破。
Chatop 2009-11-24日记录