|
(function () {
|
|
|
var JPEGElevDecompress;
|
|
JPEGElevDecompress = (function () {
|
|
//fmod javascript
|
Math.fmod = function (a, b) { return Number((a - (Math.floor(a / b) * b)).toPrecision(8)); };
|
|
//constants
|
aPRE_LINEBLOCKS = 16;
|
aPRE_BLOCKSIZE = 16;
|
aPRE_MINBITS = 4;
|
aPRE_MAXBITS = 4;
|
|
function JPEGElevDecompress() {
|
|
//private members
|
this.m_arrfmin = new Float32Array(aPRE_LINEBLOCKS * aPRE_LINEBLOCKS);
|
this.m_arrfmax = new Float32Array(aPRE_LINEBLOCKS * aPRE_LINEBLOCKS);
|
|
this.floatBufferOut = new Float32Array(256 * 256);
|
|
}
|
|
JPEGElevDecompress.prototype.Decompress = function () {
|
|
var minval = 0;
|
var maxval = 0;
|
|
|
}
|
|
|
//function for decompression using the min max prelist method
|
JPEGElevDecompress.prototype.ElevDecompress = function (buffer8, prelist, minval, maxval) {
|
// maxval = (maxval - minval) * 10 + minval;
|
var xx, yy;
|
var prepos = 0;
|
var kmin;
|
var kmax;
|
var delta = maxval - minval;
|
|
var smalldelta = delta / ((1 << aPRE_MINBITS));
|
var blockid = 0;
|
|
for (yy = 0 ; yy < aPRE_LINEBLOCKS; yy++) {
|
for (xx = 0; xx < aPRE_LINEBLOCKS; xx++) {
|
if (aPRE_MINBITS == 4 && aPRE_MAXBITS == 4) {
|
var num = prelist[prepos++];
|
kmin = num & 0xf;
|
kmax = num >> 4;
|
} else if (aPRE_MINBITS <= 8 && aPRE_MAXBITS <= 8) {
|
kmin = prelist[prepos++];
|
kmax = prelist[prepos++];
|
} else
|
console.error("Error - jpeg decompression");
|
|
var real_min = minval + smalldelta * kmin;
|
var smalldelta2 = (maxval - real_min) / ((1 << (2 * aPRE_MAXBITS)));
|
this.m_arrfmin[blockid] = real_min;
|
|
var real_max = real_min + smalldelta2 * ((kmax + 1) * (kmax + 1));
|
this.m_arrfmax[blockid] = real_max;
|
|
blockid++;
|
}
|
}
|
|
blockid = 0;
|
|
for (yy = 0; yy < aPRE_LINEBLOCKS; yy++) {
|
|
for (xx = 0; xx < aPRE_LINEBLOCKS; xx++) {
|
|
var real_min = this.m_arrfmin[blockid];
|
var real_max = this.m_arrfmax[blockid];
|
var scale = (real_max - real_min) / 255.0;
|
|
if (real_min < scale && scale > 0.0) {
|
real_min += Math.fmod(Math.abs(real_min), scale);
|
}
|
var offset = real_min;
|
|
var add = xx * aPRE_BLOCKSIZE + yy * aPRE_BLOCKSIZE * 256;
|
|
for (var y = 0; y < aPRE_BLOCKSIZE; y++) {
|
for (var x = 0; x < aPRE_BLOCKSIZE; x++) {
|
|
var h8 = buffer8.data[add*4];
|
var height = h8 * scale + offset;
|
this.floatBufferOut.buffer[add] = height;
|
add++;
|
}
|
add += 256 - aPRE_BLOCKSIZE;
|
}
|
blockid++;
|
}
|
}
|
return this.floatBufferOut.buffer;
|
}
|
return JPEGElevDecompress;
|
})();
|
|
this.JPEGElevDecompress = JPEGElevDecompress;
|
|
}).call(this);
|