2004/12/24 | 将像素字的填充信息压缩
类别(我滴地盘er) | 评论(3) | 阅读(264) | 发表于 19:56
//处理后用0-9,A-Z,a-z62种字符来记录像素位置
System.useCodepage = true;
//加载外部文本文件(文件路径,目标地址[,变量名称[,加载完毕后执行的函数]])
function loadTXT(url:String, temp:Object, func:Function) {
    var depth = this.getNextHighestDepth();
    var mc = this.createEmptyMovieClip("MC"+depth, depth);
    var tt = setInterval(test, 50);
    loadVariables(url, mc);
    function test() {
        if (mc.txtend != undefined) {
            temp.data = mc.jhdata;
            if (func != null) {
                func();
            }
            removeMovieClip(mc);
            clearInterval(tt);
        }
    }
}
//
jhdata = {};
loadTXT("jh7086.txt", jhdata, begin);
//
function begin() {
    var mydata=zip(jhdata.data);
    trace(mydata);
}
//数据压缩
function zip(mydata) {
    mydata = mydata.split("\r\n");
    mydata.shift();
    mydata.pop();
    var L:String = jh_10toD(mydata[0].length,62);
    for (var i in mydata) {
        var index=-1;
        var str="";
        while((index=mydata[i].indexOf("1",index+1))>=0){
            str+=jh_10toD(index,62);
        }
        mydata[i]=str;
    }
    return L+mydata.join(",");
}
//将10进制数N转换成d进制数(以0-9,A-Z,a-z字符表示),d为2-62
function jh_10toD(N:Number, d:Number) {
    N = Math.floor(N);
    d = d<2 ? 2 : d>62 ? 62 : d;
    var s, e:String = "";
    while (N>0) {
        s = N%d;
        if (s>35) {
            //36至62的数用a-z字符表示(s-36+97)
            s = String.fromCharCode(s+61);
        } else if (s>9) {
            //10至35的数用A-Z字符表示(s-10+65)
            s = String.fromCharCode(s+55);
        }
        e = s+e;
        N = Math.floor(N/d);
    }
    e = e != "" ? e : "0";
    return e;
}
---------------------------原始文件格式---------------------------------
jhdata=
01000001000001000000010000100001000001000000010
00101111111000101111111011111101010000101111111
00100010000010000000010000000001010010000000010
00000010010010000100010001111011111010000100010
11000100010010000100010001001001000010000100010
01001111100010000100010001001001000010000100010
01000001001010001010010001111001100010001010010
01000010010010010001010001010001100010010001010
01010100100010100000110001011010101010100000110
01100011010010000000010010010010101010000000010
00001100001010000001110000110100111010000001110
&txtend=true
----------------------处理后得到的字串(其中第一个字符记录的是行宽)---------------------------
l17DLQVbj,2456789AEGHIJKLMOPQRSTVXcefghijk,26CLVXaj,69CHLPQRSUVWXYafj,0159CHLPSVafj,145678CHLPSVafj,17ACGILPQRSVWaegj,169CFJLPRVWadhj,1358CEKLPRSUWYacij,12679CLORUWYaj,45ACJKLQRTWXYahij
0

评论Comments