zoukankan      html  css  js  c++  java
  • WIS

    发布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日记录
  • 相关阅读:
    mysql添加用户
    ubantu更新源
    内存的crash记录分析
    windows下sublime2 clojure环境配置
    服务器使用recast navigation
    网络库crash以及boost asio strand dispath分析
    CentOS7 监控进程网络流量工具安装
    vs2013提高编译速度
    Centos6.5 gitlab安装使用
    linux命令行将已有项目提交到github
  • 原文地址:https://www.cnblogs.com/zerovirs/p/1755531.html
Copyright © 2011-2022 走看看