JAL-1807 still testing
[jalviewjs.git] / bin / javajs / img / GifEncoder.js
index 9170951..dd22f43 100644 (file)
-Clazz.declarePackage ("javajs.img");
-Clazz.load (["javajs.img.ImageEncoder", "javajs.util.Lst", "$.P3"], "javajs.img.GifEncoder", ["java.lang.Boolean", "java.util.Hashtable", "javajs.util.CU", "$.M3"], function () {
-c$ = Clazz.decorateAsClass (function () {
-this.params = null;
-this.palette = null;
-this.backgroundColor = 0;
-this.interlaced = false;
-this.addHeader = true;
-this.addImage = true;
-this.addTrailer = true;
-this.isTransparent = false;
-this.floydSteinberg = true;
-this.capturing = false;
-this.looping = false;
-this.delayTime100ths = -1;
-this.bitsPerPixel = 1;
-this.byteCount = 0;
-if (!Clazz.isClassDefined ("javajs.img.GifEncoder.ColorItem")) {
-javajs.img.GifEncoder.$GifEncoder$ColorItem$ ();
-}
-if (!Clazz.isClassDefined ("javajs.img.GifEncoder.ColorCell")) {
-javajs.img.GifEncoder.$GifEncoder$ColorCell$ ();
-}
-this.initCodeSize = 0;
-this.curpt = 0;
-this.nBits = 0;
-this.maxbits = 12;
-this.maxcode = 0;
-this.maxmaxcode = 4096;
-this.htab = null;
-this.codetab = null;
-this.hsize = 5003;
-this.freeEnt = 0;
-this.clearFlag = false;
-this.clearCode = 0;
-this.EOFCode = 0;
-this.countDown = 0;
-this.pass = 0;
-this.curx = 0;
-this.cury = 0;
-this.curAccum = 0;
-this.curBits = 0;
-this.masks = null;
-this.bufPt = 0;
-this.buf = null;
-Clazz.instantialize (this, arguments);
-}, javajs.img, "GifEncoder", javajs.img.ImageEncoder);
-Clazz.prepareFields (c$, function () {
-this.htab =  Clazz.newIntArray (5003, 0);
-this.codetab =  Clazz.newIntArray (5003, 0);
-this.masks =  Clazz.newIntArray (-1, [0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF]);
-this.buf =  Clazz.newByteArray (256, 0);
-});
-Clazz.overrideMethod (c$, "setParams", 
-function (params) {
-this.params = params;
-var ic = params.get ("transparentColor");
-if (ic == null) {
-ic = params.get ("backgroundColor");
-if (ic != null) this.backgroundColor = ic.intValue ();
-} else {
-this.backgroundColor = ic.intValue ();
-this.isTransparent = true;
-}this.interlaced = (Boolean.TRUE === params.get ("interlaced"));
-if (params.containsKey ("captureRootExt") || !params.containsKey ("captureMode")) return;
-this.interlaced = false;
-this.capturing = true;
-try {
-this.byteCount = (params.get ("captureByteCount")).intValue ();
-} catch (e) {
-if (Clazz.exceptionOf (e, Exception)) {
-} else {
-throw e;
-}
-}
-switch ("maec".indexOf ((params.get ("captureMode")).substring (0, 1))) {
-case 0:
-params.put ("captureMode", "add");
-this.addImage = false;
-this.addTrailer = false;
-break;
-case 1:
-this.addHeader = false;
-this.addTrailer = false;
-var fps = Math.abs ((params.get ("captureFps")).intValue ());
-this.delayTime100ths = (fps == 0 ? 0 : Clazz.doubleToInt (100 / fps));
-this.looping = (Boolean.FALSE !== params.get ("captureLooping"));
-break;
-case 2:
-this.addHeader = false;
-this.addImage = false;
-break;
-case 3:
-this.addHeader = false;
-this.addImage = false;
-this.out.cancel ();
-break;
-}
-}, "java.util.Map");
-Clazz.overrideMethod (c$, "generate", 
-function () {
-if (this.addHeader) this.writeHeader ();
-this.addHeader = false;
-if (this.addImage) {
-this.createPalette ();
-this.writeGraphicControlExtension ();
-if (this.delayTime100ths >= 0 && this.looping) this.writeNetscapeLoopExtension ();
-this.writeImage ();
-}});
-Clazz.overrideMethod (c$, "close", 
-function () {
-if (this.addTrailer) {
-this.writeTrailer ();
-} else {
-this.doClose = false;
-}if (this.capturing) this.params.put ("captureByteCount", Integer.$valueOf (this.byteCount));
-});
-Clazz.defineMethod (c$, "createPalette", 
-($fz = function () {
-var tempColors =  new javajs.util.Lst ();
-var ciHash =  new java.util.Hashtable ();
-for (var i = 0, n = this.pixels.length; i < n; i++) {
-var rgb = this.pixels[i];
-var key = Integer.$valueOf (rgb);
-var item = ciHash.get (key);
-if (item == null) {
-item = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorItem, this, null, rgb, rgb == this.backgroundColor);
-ciHash.put (key, item);
-tempColors.addLast (item);
-}}
-var nColors = tempColors.size ();
-System.out.println ("GIF total image colors: " + nColors);
-ciHash = null;
-var cells = this.quantizeColors (tempColors);
-nColors = cells.size ();
-System.out.println ("GIF final color count: " + nColors);
-var colorMap =  new java.util.Hashtable ();
-this.bitsPerPixel = (nColors <= 2 ? 1 : nColors <= 4 ? 2 : nColors <= 16 ? 4 : 8);
-this.palette =  new Array (1 << this.bitsPerPixel);
-for (var i = 0; i < nColors; i++) {
-var c = cells.get (i);
-colorMap.put (Integer.$valueOf (javajs.util.CU.colorPtToFFRGB (this.palette[i] = c.setColor ())), c);
-}
-this.pixels = this.indexPixels (cells, colorMap);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "quantizeColors", 
-($fz = function (tempColors) {
-var n = tempColors.size ();
-var cells =  new javajs.util.Lst ();
-var cc = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorCell, this, null, 0);
-cc.addLast (Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorItem, this, null, this.backgroundColor, true));
-cells.addLast (cc);
-cc = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorCell, this, null, 1);
-if (n > 256) cells.addLast (cc);
-for (var i = 0; i < n; i++) {
-var c = tempColors.get (i);
-if (c.isBackground) continue;
-cc.addLast (c);
-if (n <= 256) {
-cells.addLast (cc);
-cc = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorCell, this, null, cells.size ());
-}}
-tempColors.clear ();
-if (n > 256) while ((n = cells.size ()) < 256) {
-var maxVol = 0;
-var maxCell = null;
-for (var i = n; --i >= 1; ) {
-var c = cells.get (i);
-var v = c.getVolume (false);
-if (v > maxVol) {
-maxVol = v;
-maxCell = c;
-}}
-if (maxCell == null || !maxCell.splitCell (cells)) break;
-}
-return cells;
-}, $fz.isPrivate = true, $fz), "javajs.util.Lst");
-Clazz.defineMethod (c$, "indexPixels", 
-($fz = function (cells, colorMap) {
-var w2 = this.width + 2;
-var errors =  new Array (w2);
-var newPixels =  Clazz.newIntArray (this.pixels.length, 0);
-var err =  new javajs.util.P3 ();
-var lab;
-var rgb;
-var nearestCell =  new java.util.Hashtable ();
-for (var i = 0, p = 0; i < this.height; ++i) {
-var notLastRow = (i != this.height - 1);
-for (var j = 0; j < this.width; ++j, p++) {
-if (this.pixels[p] == this.backgroundColor) {
-continue;
-}var pe = errors[p % w2];
-if (pe == null || pe.x == 3.4028235E38) {
-lab = null;
-rgb = this.pixels[p];
-} else {
-lab = this.toLABnorm (this.pixels[p]);
-err = pe;
-err.x = this.clamp (err.x, -75, 75);
-err.y = this.clamp (err.y, -75, 75);
-err.z = this.clamp (err.z, -75, 75);
-lab.add (err);
-rgb = javajs.util.CU.colorPtToFFRGB (this.toRGB (lab));
-}var key = Integer.$valueOf (rgb);
-var cell = colorMap.get (key);
-if (cell == null) {
-lab = this.toLABnorm (rgb);
-cell = nearestCell.get (key);
-if (cell == null) {
-var maxerr = 3.4028235E38;
-for (var ib = cells.size (); --ib >= 1; ) {
-var c = cells.get (ib);
-err.sub2 (lab, c.center);
-var d = err.lengthSquared ();
-if (d < maxerr) {
-maxerr = d;
-cell = c;
-}}
-nearestCell.put (key, cell);
-}if (this.floydSteinberg) {
-err.sub2 (lab, cell.center);
-var notLastCol = (j < this.width - 1);
-if (notLastCol) this.addError (err, 7, errors, p + 1, w2);
-if (notLastRow) {
-if (j > 0) this.addError (err, 3, errors, p + this.width - 1, w2);
-this.addError (err, 5, errors, p + this.width, w2);
-if (notLastCol) this.addError (err, 1, errors, p + this.width + 1, w2);
-}}err.x = 3.4028235E38;
-}newPixels[p] = cell.index;
-}
-}
-return newPixels;
-}, $fz.isPrivate = true, $fz), "javajs.util.Lst,java.util.Map");
-Clazz.defineMethod (c$, "addError", 
-($fz = function (err, f, errors, p, w2) {
-if (this.pixels[p] == this.backgroundColor) return;
-p %= w2;
-var errp = errors[p];
-if (errp == null) errp = errors[p] =  new javajs.util.P3 ();
- else if (errp.x == 3.4028235E38) errp.set (0, 0, 0);
-errp.scaleAdd2 (f / 16, err, errp);
-}, $fz.isPrivate = true, $fz), "javajs.util.P3,~N,~A,~N,~N");
-Clazz.defineMethod (c$, "toLABnorm", 
-function (rgb) {
-var lab = javajs.util.CU.colorPtFromInt (rgb, null);
-this.rgbToXyz (lab, lab);
-this.xyzToLab (lab, lab);
-lab.y = (lab.y + 86.185) / (184.439) * 100;
-lab.z = (lab.z + 107.863) / (202.345) * 100;
-return lab;
-}, "~N");
-Clazz.defineMethod (c$, "toRGB", 
-function (lab) {
-var xyz = javajs.util.P3.newP (lab);
-xyz.y = xyz.y / 100 * (184.439) - 86.185;
-xyz.z = xyz.z / 100 * (202.345) - 107.863;
-this.labToXyz (xyz, xyz);
-return this.xyzToRgb (xyz, xyz);
-}, "javajs.util.P3");
-Clazz.defineMethod (c$, "rgbToXyz", 
-function (rgb, xyz) {
-if (xyz == null) xyz =  new javajs.util.P3 ();
-xyz.x = this.sxyz (rgb.x);
-xyz.y = this.sxyz (rgb.y);
-xyz.z = this.sxyz (rgb.z);
-javajs.img.GifEncoder.rgb2xyz.rotate (xyz);
-return xyz;
-}, "javajs.util.P3,javajs.util.P3");
-Clazz.defineMethod (c$, "sxyz", 
-($fz = function (x) {
-x /= 255;
-return (x <= 0.04045 ? x / 12.92 : Math.pow (((x + 0.055) / 1.055), 2.4)) * 100;
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "xyzToRgb", 
-function (xyz, rgb) {
-if (rgb == null) rgb =  new javajs.util.P3 ();
-rgb.setT (xyz);
-rgb.scale (0.01);
-javajs.img.GifEncoder.xyz2rgb.rotate (rgb);
-rgb.x = this.clamp (this.srgb (rgb.x), 0, 255);
-rgb.y = this.clamp (this.srgb (rgb.y), 0, 255);
-rgb.z = this.clamp (this.srgb (rgb.z), 0, 255);
-return rgb;
-}, "javajs.util.P3,javajs.util.P3");
-Clazz.defineMethod (c$, "srgb", 
-($fz = function (x) {
-return (x > 0.0031308 ? (1.055 * Math.pow (x, 0.4166666666666667)) - 0.055 : x * 12.92) * 255;
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "xyzToLab", 
-function (xyz, lab) {
-if (lab == null) lab =  new javajs.util.P3 ();
-var x = this.flab (xyz.x / 95.0429);
-var y = this.flab (xyz.y / 100);
-var z = this.flab (xyz.z / 108.89);
-lab.x = (116 * y) - 16;
-lab.y = 500 * (x - y);
-lab.z = 200 * (y - z);
-return lab;
-}, "javajs.util.P3,javajs.util.P3");
-Clazz.defineMethod (c$, "flab", 
-($fz = function (t) {
-return (t > 8.85645168E-3 ? Math.pow (t, 0.333333333) : 7.78703704 * t + 0.137931034);
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "labToXyz", 
-function (lab, xyz) {
-if (xyz == null) xyz =  new javajs.util.P3 ();
-xyz.setT (lab);
-var y = (xyz.x + 16) / 116;
-var x = xyz.y / 500 + y;
-var z = y - xyz.z / 200;
-xyz.x = this.fxyz (x) * 95.0429;
-xyz.y = this.fxyz (y) * 100;
-xyz.z = this.fxyz (z) * 108.89;
-return xyz;
-}, "javajs.util.P3,javajs.util.P3");
-Clazz.defineMethod (c$, "fxyz", 
-($fz = function (t) {
-return (t > 0.206896552 ? t * t * t : 0.128418549 * (t - 0.137931034));
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "clamp", 
-($fz = function (c, min, max) {
-c = (c < min ? min : c > max ? max : c);
-return (min == 0 ? Math.round (c) : c);
-}, $fz.isPrivate = true, $fz), "~N,~N,~N");
-Clazz.defineMethod (c$, "writeHeader", 
-($fz = function () {
-this.putString ("GIF89a");
-this.putWord (this.width);
-this.putWord (this.height);
-this.putByte (0);
-this.putByte (0);
-this.putByte (0);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "writeGraphicControlExtension", 
-($fz = function () {
-if (this.isTransparent || this.delayTime100ths >= 0) {
-this.putByte (0x21);
-this.putByte (0xf9);
-this.putByte (4);
-this.putByte ((this.isTransparent ? 9 : 0) | (this.delayTime100ths > 0 ? 2 : 0));
-this.putWord (this.delayTime100ths > 0 ? this.delayTime100ths : 0);
-this.putByte (0);
-this.putByte (0);
-}}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "writeNetscapeLoopExtension", 
-($fz = function () {
-this.putByte (0x21);
-this.putByte (0xff);
-this.putByte (0x0B);
-this.putString ("NETSCAPE2.0");
-this.putByte (3);
-this.putByte (1);
-this.putWord (0);
-this.putByte (0);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "writeImage", 
-($fz = function () {
-this.putByte (0x2C);
-this.putWord (0);
-this.putWord (0);
-this.putWord (this.width);
-this.putWord (this.height);
-var packedFields = 0x80 | (this.interlaced ? 0x40 : 0) | (this.bitsPerPixel - 1);
-this.putByte (packedFields);
-var colorMapSize = 1 << this.bitsPerPixel;
-var p =  new javajs.util.P3 ();
-for (var i = 0; i < colorMapSize; i++) {
-if (this.palette[i] != null) p = this.palette[i];
-this.putByte (Clazz.floatToInt (p.x));
-this.putByte (Clazz.floatToInt (p.y));
-this.putByte (Clazz.floatToInt (p.z));
-}
-this.putByte (this.initCodeSize = (this.bitsPerPixel <= 1 ? 2 : this.bitsPerPixel));
-this.compress ();
-this.putByte (0);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "writeTrailer", 
-($fz = function () {
-this.putByte (0x3B);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "nextPixel", 
-($fz = function () {
-if (this.countDown-- == 0) return -1;
-var colorIndex = this.pixels[this.curpt];
-++this.curx;
-if (this.curx == this.width) {
-this.curx = 0;
-if (this.interlaced) this.updateY (javajs.img.GifEncoder.INTERLACE_PARAMS[this.pass], javajs.img.GifEncoder.INTERLACE_PARAMS[this.pass + 4]);
- else ++this.cury;
-}this.curpt = this.cury * this.width + this.curx;
-return colorIndex & 0xff;
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "updateY", 
-($fz = function (yNext, yNew) {
-this.cury += yNext;
-if (yNew >= 0 && this.cury >= this.height) {
-this.cury = yNew;
-++this.pass;
-}}, $fz.isPrivate = true, $fz), "~N,~N");
-Clazz.defineMethod (c$, "putWord", 
-($fz = function (w) {
-this.putByte (w);
-this.putByte (w >> 8);
-}, $fz.isPrivate = true, $fz), "~N");
-c$.MAXCODE = Clazz.defineMethod (c$, "MAXCODE", 
-($fz = function (nBits) {
-return (1 << nBits) - 1;
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "compress", 
-($fz = function () {
-this.countDown = this.width * this.height;
-this.pass = 0;
-this.curx = 0;
-this.cury = 0;
-this.clearFlag = false;
-this.nBits = this.initCodeSize + 1;
-this.maxcode = javajs.img.GifEncoder.MAXCODE (this.nBits);
-this.clearCode = 1 << this.initCodeSize;
-this.EOFCode = this.clearCode + 1;
-this.freeEnt = this.clearCode + 2;
-this.bufPt = 0;
-var ent = this.nextPixel ();
-var hshift = 0;
-var fcode;
-for (fcode = this.hsize; fcode < 65536; fcode *= 2) ++hshift;
-
-hshift = 8 - hshift;
-var hsizeReg = this.hsize;
-this.clearHash (hsizeReg);
-this.output (this.clearCode);
-var c;
-outer_loop : while ((c = this.nextPixel ()) != -1) {
-fcode = (c << this.maxbits) + ent;
-var i = (c << hshift) ^ ent;
-if (this.htab[i] == fcode) {
-ent = this.codetab[i];
-continue;
-} else if (this.htab[i] >= 0) {
-var disp = hsizeReg - i;
-if (i == 0) disp = 1;
-do {
-if ((i -= disp) < 0) i += hsizeReg;
-if (this.htab[i] == fcode) {
-ent = this.codetab[i];
-continue outer_loop;
-}} while (this.htab[i] >= 0);
-}this.output (ent);
-ent = c;
-if (this.freeEnt < this.maxmaxcode) {
-this.codetab[i] = this.freeEnt++;
-this.htab[i] = fcode;
-} else {
-this.clearBlock ();
-}}
-this.output (ent);
-this.output (this.EOFCode);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "output", 
-($fz = function (code) {
-this.curAccum &= this.masks[this.curBits];
-if (this.curBits > 0) this.curAccum |= (code << this.curBits);
- else this.curAccum = code;
-this.curBits += this.nBits;
-while (this.curBits >= 8) {
-this.byteOut ((this.curAccum & 0xff));
-this.curAccum >>= 8;
-this.curBits -= 8;
-}
-if (this.freeEnt > this.maxcode || this.clearFlag) {
-if (this.clearFlag) {
-this.maxcode = javajs.img.GifEncoder.MAXCODE (this.nBits = this.initCodeSize + 1);
-this.clearFlag = false;
-} else {
-++this.nBits;
-if (this.nBits == this.maxbits) this.maxcode = this.maxmaxcode;
- else this.maxcode = javajs.img.GifEncoder.MAXCODE (this.nBits);
-}}if (code == this.EOFCode) {
-while (this.curBits > 0) {
-this.byteOut ((this.curAccum & 0xff));
-this.curAccum >>= 8;
-this.curBits -= 8;
-}
-this.flushBytes ();
-}}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "clearBlock", 
-($fz = function () {
-this.clearHash (this.hsize);
-this.freeEnt = this.clearCode + 2;
-this.clearFlag = true;
-this.output (this.clearCode);
-}, $fz.isPrivate = true, $fz));
-Clazz.defineMethod (c$, "clearHash", 
-($fz = function (hsize) {
-for (var i = 0; i < hsize; ++i) this.htab[i] = -1;
-
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "byteOut", 
-($fz = function (c) {
-this.buf[this.bufPt++] = c;
-if (this.bufPt >= 254) this.flushBytes ();
-}, $fz.isPrivate = true, $fz), "~N");
-Clazz.defineMethod (c$, "flushBytes", 
-function () {
-if (this.bufPt > 0) {
-this.putByte (this.bufPt);
-this.out.write (this.buf, 0, this.bufPt);
-this.byteCount += this.bufPt;
-this.bufPt = 0;
-}});
-c$.$GifEncoder$ColorItem$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.isBackground = false;
-Clazz.instantialize (this, arguments);
-}, javajs.img.GifEncoder, "ColorItem", javajs.util.P3);
-Clazz.makeConstructor (c$, 
-function (a, b) {
-Clazz.superConstructor (this, javajs.img.GifEncoder.ColorItem, []);
-this.isBackground = b;
-this.setT (this.b$["javajs.img.GifEncoder"].toLABnorm (a));
-}, "~N,~B");
-c$ = Clazz.p0p ();
-};
-c$.$GifEncoder$ColorCell$ = function () {
-Clazz.pu$h ();
-c$ = Clazz.decorateAsClass (function () {
-Clazz.prepareCallback (this, arguments);
-this.index = 0;
-this.center = null;
-this.volume = 0;
-Clazz.instantialize (this, arguments);
-}, javajs.img.GifEncoder, "ColorCell", javajs.util.Lst);
-Clazz.makeConstructor (c$, 
-function (a) {
-Clazz.superConstructor (this, javajs.img.GifEncoder.ColorCell, []);
-this.index = a;
-}, "~N");
-Clazz.defineMethod (c$, "getVolume", 
-function (a) {
-if (this.volume != 0) return this.volume;
-if (this.size () < 2) return -1;
-var b = -2147483647;
-var c = 2147483647;
-var d = -2147483647;
-var e = 2147483647;
-var f = -2147483647;
-var g = 2147483647;
-var h = this.size ();
-for (var i = h; --i >= 0; ) {
-var j = this.get (i);
-if (j.x < c) c = j.x;
-if (j.y < e) e = j.y;
-if (j.z < g) g = j.z;
-if (j.x > b) b = j.x;
-if (j.y > d) d = j.y;
-if (j.z > f) f = j.z;
-}
-var j = (b - c);
-var k = (d - e);
-var l = (f - g);
-return this.volume = j * j + k * k + l * l;
-}, "~B");
-Clazz.defineMethod (c$, "setColor", 
-function () {
-var a = this.size ();
-this.center =  new javajs.util.P3 ();
-for (var b = a; --b >= 0; ) this.center.add (this.get (b));
-
-this.center.scale (1 / a);
-return this.b$["javajs.img.GifEncoder"].toRGB (this.center);
-});
-Clazz.defineMethod (c$, "splitCell", 
-function (a) {
-var b = this.size ();
-if (b < 2) return false;
-var c = a.size ();
-var d = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorCell, this, null, c);
-a.addLast (d);
-var e =  Clazz.newFloatArray (3, 3, 0);
-for (var f = 0; f < 3; f++) {
-var g = 3.4028235E38;
-var h = -3.4028235E38;
-for (var i = b; --i >= 0; ) {
-var j = this.get (i);
-var k = (f == 0 ? j.x : f == 1 ? j.y : j.z);
-if (g > k) g = k;
-if (h < k) h = k;
-}
-e[0][f] = g;
-e[1][f] = h;
-e[2][f] = h - g;
-}
-var g = e[2];
-var h = (g[0] >= g[1] ? (g[0] >= g[2] ? 0 : 2) : g[1] >= g[2] ? 1 : 2);
-var i = e[0][h] + e[2][h] / 2;
-this.volume = 0;
-switch (h) {
-case 0:
-for (var j = b; --j >= 0; ) if (this.get (j).x >= i) d.addLast (this.remove (j));
-
-break;
-case 1:
-for (var k = b; --k >= 0; ) if (this.get (k).y >= i) d.addLast (this.remove (k));
-
-break;
-case 2:
-for (var l = this.size (); --l >= 0; ) if (this.get (l).z >= i) d.addLast (this.remove (l));
-
-break;
-}
-return true;
-}, "javajs.util.Lst");
-c$ = Clazz.p0p ();
-};
-Clazz.defineStatics (c$,
-"xyz2rgb", null,
-"rgb2xyz", null);
-{
-javajs.img.GifEncoder.rgb2xyz = javajs.util.M3.newA9 ( Clazz.newFloatArray (-1, [0.4124, 0.3576, 0.1805, 0.2126, 0.7152, 0.0722, 0.0193, 0.1192, 0.9505]));
-javajs.img.GifEncoder.xyz2rgb = javajs.util.M3.newA9 ( Clazz.newFloatArray (-1, [3.2406, -1.5372, -0.4986, -0.9689, 1.8758, 0.0415, 0.0557, -0.204, 1.0570]));
-}Clazz.defineStatics (c$,
-"EOF", -1,
-"INTERLACE_PARAMS",  Clazz.newIntArray (-1, [8, 8, 4, 2, 4, 2, 1, 0]),
-"BITS", 12,
-"HSIZE", 5003);
-});
+Clazz.declarePackage ("javajs.img");\r
+Clazz.load (["javajs.img.ImageEncoder", "javajs.util.Lst", "$.P3"], "javajs.img.GifEncoder", ["java.lang.Boolean", "java.util.Hashtable", "javajs.util.CU", "$.M3"], function () {\r
+c$ = Clazz.decorateAsClass (function () {\r
+this.params = null;\r
+this.palette = null;\r
+this.backgroundColor = 0;\r
+this.interlaced = false;\r
+this.addHeader = true;\r
+this.addImage = true;\r
+this.addTrailer = true;\r
+this.isTransparent = false;\r
+this.floydSteinberg = true;\r
+this.capturing = false;\r
+this.looping = false;\r
+this.delayTime100ths = -1;\r
+this.bitsPerPixel = 1;\r
+this.byteCount = 0;\r
+if (!Clazz.isClassDefined ("javajs.img.GifEncoder.ColorItem")) {\r
+javajs.img.GifEncoder.$GifEncoder$ColorItem$ ();\r
+}\r
+if (!Clazz.isClassDefined ("javajs.img.GifEncoder.ColorCell")) {\r
+javajs.img.GifEncoder.$GifEncoder$ColorCell$ ();\r
+}\r
+this.initCodeSize = 0;\r
+this.curpt = 0;\r
+this.nBits = 0;\r
+this.maxbits = 12;\r
+this.maxcode = 0;\r
+this.maxmaxcode = 4096;\r
+this.htab = null;\r
+this.codetab = null;\r
+this.hsize = 5003;\r
+this.freeEnt = 0;\r
+this.clearFlag = false;\r
+this.clearCode = 0;\r
+this.EOFCode = 0;\r
+this.countDown = 0;\r
+this.pass = 0;\r
+this.curx = 0;\r
+this.cury = 0;\r
+this.curAccum = 0;\r
+this.curBits = 0;\r
+this.masks = null;\r
+this.bufPt = 0;\r
+this.buf = null;\r
+Clazz.instantialize (this, arguments);\r
+}, javajs.img, "GifEncoder", javajs.img.ImageEncoder);\r
+Clazz.prepareFields (c$, function () {\r
+this.htab =  Clazz.newIntArray (5003, 0);\r
+this.codetab =  Clazz.newIntArray (5003, 0);\r
+this.masks =  Clazz.newIntArray (-1, [0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF]);\r
+this.buf =  Clazz.newByteArray (256, 0);\r
+});\r
+Clazz.overrideMethod (c$, "setParams", \r
+function (params) {\r
+this.params = params;\r
+var ic = params.get ("transparentColor");\r
+if (ic == null) {\r
+ic = params.get ("backgroundColor");\r
+if (ic != null) this.backgroundColor = ic.intValue ();\r
+} else {\r
+this.backgroundColor = ic.intValue ();\r
+this.isTransparent = true;\r
+}this.interlaced = (Boolean.TRUE === params.get ("interlaced"));\r
+if (params.containsKey ("captureRootExt") || !params.containsKey ("captureMode")) return;\r
+this.interlaced = false;\r
+this.capturing = true;\r
+try {\r
+this.byteCount = (params.get ("captureByteCount")).intValue ();\r
+} catch (e) {\r
+if (Clazz.exceptionOf (e, Exception)) {\r
+} else {\r
+throw e;\r
+}\r
+}\r
+switch ("maec".indexOf ((params.get ("captureMode")).substring (0, 1))) {\r
+case 0:\r
+params.put ("captureMode", "add");\r
+this.addImage = false;\r
+this.addTrailer = false;\r
+break;\r
+case 1:\r
+this.addHeader = false;\r
+this.addTrailer = false;\r
+var fps = Math.abs ((params.get ("captureFps")).intValue ());\r
+this.delayTime100ths = (fps == 0 ? 0 : Clazz.doubleToInt (100 / fps));\r
+this.looping = (Boolean.FALSE !== params.get ("captureLooping"));\r
+break;\r
+case 2:\r
+this.addHeader = false;\r
+this.addImage = false;\r
+break;\r
+case 3:\r
+this.addHeader = false;\r
+this.addImage = false;\r
+this.out.cancel ();\r
+break;\r
+}\r
+}, "java.util.Map");\r
+Clazz.overrideMethod (c$, "generate", \r
+function () {\r
+if (this.addHeader) this.writeHeader ();\r
+this.addHeader = false;\r
+if (this.addImage) {\r
+this.createPalette ();\r
+this.writeGraphicControlExtension ();\r
+if (this.delayTime100ths >= 0 && this.looping) this.writeNetscapeLoopExtension ();\r
+this.writeImage ();\r
+}});\r
+Clazz.overrideMethod (c$, "close", \r
+function () {\r
+if (this.addTrailer) {\r
+this.writeTrailer ();\r
+} else {\r
+this.doClose = false;\r
+}if (this.capturing) this.params.put ("captureByteCount", Integer.$valueOf (this.byteCount));\r
+});\r
+Clazz.defineMethod (c$, "createPalette", \r
+($fz = function () {\r
+var tempColors =  new javajs.util.Lst ();\r
+var ciHash =  new java.util.Hashtable ();\r
+for (var i = 0, n = this.pixels.length; i < n; i++) {\r
+var rgb = this.pixels[i];\r
+var key = Integer.$valueOf (rgb);\r
+var item = ciHash.get (key);\r
+if (item == null) {\r
+item = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorItem, this, null, rgb, rgb == this.backgroundColor);\r
+ciHash.put (key, item);\r
+tempColors.addLast (item);\r
+}}\r
+var nColors = tempColors.size ();\r
+System.out.println ("GIF total image colors: " + nColors);\r
+ciHash = null;\r
+var cells = this.quantizeColors (tempColors);\r
+nColors = cells.size ();\r
+System.out.println ("GIF final color count: " + nColors);\r
+var colorMap =  new java.util.Hashtable ();\r
+this.bitsPerPixel = (nColors <= 2 ? 1 : nColors <= 4 ? 2 : nColors <= 16 ? 4 : 8);\r
+this.palette =  new Array (1 << this.bitsPerPixel);\r
+for (var i = 0; i < nColors; i++) {\r
+var c = cells.get (i);\r
+colorMap.put (Integer.$valueOf (javajs.util.CU.colorPtToFFRGB (this.palette[i] = c.setColor ())), c);\r
+}\r
+this.pixels = this.indexPixels (cells, colorMap);\r
+}, $fz.isPrivate = true, $fz));\r
+Clazz.defineMethod (c$, "quantizeColors", \r
+($fz = function (tempColors) {\r
+var n = tempColors.size ();\r
+var cells =  new javajs.util.Lst ();\r
+var cc = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorCell, this, null, 0);\r
+cc.addLast (Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorItem, this, null, this.backgroundColor, true));\r
+cells.addLast (cc);\r
+cc = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorCell, this, null, 1);\r
+if (n > 256) cells.addLast (cc);\r
+for (var i = 0; i < n; i++) {\r
+var c = tempColors.get (i);\r
+if (c.isBackground) continue;\r
+cc.addLast (c);\r
+if (n <= 256) {\r
+cells.addLast (cc);\r
+cc = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorCell, this, null, cells.size ());\r
+}}\r
+tempColors.clear ();\r
+if (n > 256) while ((n = cells.size ()) < 256) {\r
+var maxVol = 0;\r
+var maxCell = null;\r
+for (var i = n; --i >= 1; ) {\r
+var c = cells.get (i);\r
+var v = c.getVolume (false);\r
+if (v > maxVol) {\r
+maxVol = v;\r
+maxCell = c;\r
+}}\r
+if (maxCell == null || !maxCell.splitCell (cells)) break;\r
+}\r
+return cells;\r
+}, $fz.isPrivate = true, $fz), "javajs.util.Lst");\r
+Clazz.defineMethod (c$, "indexPixels", \r
+($fz = function (cells, colorMap) {\r
+var w2 = this.width + 2;\r
+var errors =  new Array (w2);\r
+var newPixels =  Clazz.newIntArray (this.pixels.length, 0);\r
+var err =  new javajs.util.P3 ();\r
+var lab;\r
+var rgb;\r
+var nearestCell =  new java.util.Hashtable ();\r
+for (var i = 0, p = 0; i < this.height; ++i) {\r
+var notLastRow = (i != this.height - 1);\r
+for (var j = 0; j < this.width; ++j, p++) {\r
+if (this.pixels[p] == this.backgroundColor) {\r
+continue;\r
+}var pe = errors[p % w2];\r
+if (pe == null || pe.x == 3.4028235E38) {\r
+lab = null;\r
+rgb = this.pixels[p];\r
+} else {\r
+lab = this.toLABnorm (this.pixels[p]);\r
+err = pe;\r
+err.x = this.clamp (err.x, -75, 75);\r
+err.y = this.clamp (err.y, -75, 75);\r
+err.z = this.clamp (err.z, -75, 75);\r
+lab.add (err);\r
+rgb = javajs.util.CU.colorPtToFFRGB (this.toRGB (lab));\r
+}var key = Integer.$valueOf (rgb);\r
+var cell = colorMap.get (key);\r
+if (cell == null) {\r
+lab = this.toLABnorm (rgb);\r
+cell = nearestCell.get (key);\r
+if (cell == null) {\r
+var maxerr = 3.4028235E38;\r
+for (var ib = cells.size (); --ib >= 1; ) {\r
+var c = cells.get (ib);\r
+err.sub2 (lab, c.center);\r
+var d = err.lengthSquared ();\r
+if (d < maxerr) {\r
+maxerr = d;\r
+cell = c;\r
+}}\r
+nearestCell.put (key, cell);\r
+}if (this.floydSteinberg) {\r
+err.sub2 (lab, cell.center);\r
+var notLastCol = (j < this.width - 1);\r
+if (notLastCol) this.addError (err, 7, errors, p + 1, w2);\r
+if (notLastRow) {\r
+if (j > 0) this.addError (err, 3, errors, p + this.width - 1, w2);\r
+this.addError (err, 5, errors, p + this.width, w2);\r
+if (notLastCol) this.addError (err, 1, errors, p + this.width + 1, w2);\r
+}}err.x = 3.4028235E38;\r
+}newPixels[p] = cell.index;\r
+}\r
+}\r
+return newPixels;\r
+}, $fz.isPrivate = true, $fz), "javajs.util.Lst,java.util.Map");\r
+Clazz.defineMethod (c$, "addError", \r
+($fz = function (err, f, errors, p, w2) {\r
+if (this.pixels[p] == this.backgroundColor) return;\r
+p %= w2;\r
+var errp = errors[p];\r
+if (errp == null) errp = errors[p] =  new javajs.util.P3 ();\r
+ else if (errp.x == 3.4028235E38) errp.set (0, 0, 0);\r
+errp.scaleAdd2 (f / 16, err, errp);\r
+}, $fz.isPrivate = true, $fz), "javajs.util.P3,~N,~A,~N,~N");\r
+Clazz.defineMethod (c$, "toLABnorm", \r
+function (rgb) {\r
+var lab = javajs.util.CU.colorPtFromInt (rgb, null);\r
+this.rgbToXyz (lab, lab);\r
+this.xyzToLab (lab, lab);\r
+lab.y = (lab.y + 86.185) / (184.439) * 100;\r
+lab.z = (lab.z + 107.863) / (202.345) * 100;\r
+return lab;\r
+}, "~N");\r
+Clazz.defineMethod (c$, "toRGB", \r
+function (lab) {\r
+var xyz = javajs.util.P3.newP (lab);\r
+xyz.y = xyz.y / 100 * (184.439) - 86.185;\r
+xyz.z = xyz.z / 100 * (202.345) - 107.863;\r
+this.labToXyz (xyz, xyz);\r
+return this.xyzToRgb (xyz, xyz);\r
+}, "javajs.util.P3");\r
+Clazz.defineMethod (c$, "rgbToXyz", \r
+function (rgb, xyz) {\r
+if (xyz == null) xyz =  new javajs.util.P3 ();\r
+xyz.x = this.sxyz (rgb.x);\r
+xyz.y = this.sxyz (rgb.y);\r
+xyz.z = this.sxyz (rgb.z);\r
+javajs.img.GifEncoder.rgb2xyz.rotate (xyz);\r
+return xyz;\r
+}, "javajs.util.P3,javajs.util.P3");\r
+Clazz.defineMethod (c$, "sxyz", \r
+($fz = function (x) {\r
+x /= 255;\r
+return (x <= 0.04045 ? x / 12.92 : Math.pow (((x + 0.055) / 1.055), 2.4)) * 100;\r
+}, $fz.isPrivate = true, $fz), "~N");\r
+Clazz.defineMethod (c$, "xyzToRgb", \r
+function (xyz, rgb) {\r
+if (rgb == null) rgb =  new javajs.util.P3 ();\r
+rgb.setT (xyz);\r
+rgb.scale (0.01);\r
+javajs.img.GifEncoder.xyz2rgb.rotate (rgb);\r
+rgb.x = this.clamp (this.srgb (rgb.x), 0, 255);\r
+rgb.y = this.clamp (this.srgb (rgb.y), 0, 255);\r
+rgb.z = this.clamp (this.srgb (rgb.z), 0, 255);\r
+return rgb;\r
+}, "javajs.util.P3,javajs.util.P3");\r
+Clazz.defineMethod (c$, "srgb", \r
+($fz = function (x) {\r
+return (x > 0.0031308 ? (1.055 * Math.pow (x, 0.4166666666666667)) - 0.055 : x * 12.92) * 255;\r
+}, $fz.isPrivate = true, $fz), "~N");\r
+Clazz.defineMethod (c$, "xyzToLab", \r
+function (xyz, lab) {\r
+if (lab == null) lab =  new javajs.util.P3 ();\r
+var x = this.flab (xyz.x / 95.0429);\r
+var y = this.flab (xyz.y / 100);\r
+var z = this.flab (xyz.z / 108.89);\r
+lab.x = (116 * y) - 16;\r
+lab.y = 500 * (x - y);\r
+lab.z = 200 * (y - z);\r
+return lab;\r
+}, "javajs.util.P3,javajs.util.P3");\r
+Clazz.defineMethod (c$, "flab", \r
+($fz = function (t) {\r
+return (t > 8.85645168E-3 ? Math.pow (t, 0.333333333) : 7.78703704 * t + 0.137931034);\r
+}, $fz.isPrivate = true, $fz), "~N");\r
+Clazz.defineMethod (c$, "labToXyz", \r
+function (lab, xyz) {\r
+if (xyz == null) xyz =  new javajs.util.P3 ();\r
+xyz.setT (lab);\r
+var y = (xyz.x + 16) / 116;\r
+var x = xyz.y / 500 + y;\r
+var z = y - xyz.z / 200;\r
+xyz.x = this.fxyz (x) * 95.0429;\r
+xyz.y = this.fxyz (y) * 100;\r
+xyz.z = this.fxyz (z) * 108.89;\r
+return xyz;\r
+}, "javajs.util.P3,javajs.util.P3");\r
+Clazz.defineMethod (c$, "fxyz", \r
+($fz = function (t) {\r
+return (t > 0.206896552 ? t * t * t : 0.128418549 * (t - 0.137931034));\r
+}, $fz.isPrivate = true, $fz), "~N");\r
+Clazz.defineMethod (c$, "clamp", \r
+($fz = function (c, min, max) {\r
+c = (c < min ? min : c > max ? max : c);\r
+return (min == 0 ? Math.round (c) : c);\r
+}, $fz.isPrivate = true, $fz), "~N,~N,~N");\r
+Clazz.defineMethod (c$, "writeHeader", \r
+($fz = function () {\r
+this.putString ("GIF89a");\r
+this.putWord (this.width);\r
+this.putWord (this.height);\r
+this.putByte (0);\r
+this.putByte (0);\r
+this.putByte (0);\r
+}, $fz.isPrivate = true, $fz));\r
+Clazz.defineMethod (c$, "writeGraphicControlExtension", \r
+($fz = function () {\r
+if (this.isTransparent || this.delayTime100ths >= 0) {\r
+this.putByte (0x21);\r
+this.putByte (0xf9);\r
+this.putByte (4);\r
+this.putByte ((this.isTransparent ? 9 : 0) | (this.delayTime100ths > 0 ? 2 : 0));\r
+this.putWord (this.delayTime100ths > 0 ? this.delayTime100ths : 0);\r
+this.putByte (0);\r
+this.putByte (0);\r
+}}, $fz.isPrivate = true, $fz));\r
+Clazz.defineMethod (c$, "writeNetscapeLoopExtension", \r
+($fz = function () {\r
+this.putByte (0x21);\r
+this.putByte (0xff);\r
+this.putByte (0x0B);\r
+this.putString ("NETSCAPE2.0");\r
+this.putByte (3);\r
+this.putByte (1);\r
+this.putWord (0);\r
+this.putByte (0);\r
+}, $fz.isPrivate = true, $fz));\r
+Clazz.defineMethod (c$, "writeImage", \r
+($fz = function () {\r
+this.putByte (0x2C);\r
+this.putWord (0);\r
+this.putWord (0);\r
+this.putWord (this.width);\r
+this.putWord (this.height);\r
+var packedFields = 0x80 | (this.interlaced ? 0x40 : 0) | (this.bitsPerPixel - 1);\r
+this.putByte (packedFields);\r
+var colorMapSize = 1 << this.bitsPerPixel;\r
+var p =  new javajs.util.P3 ();\r
+for (var i = 0; i < colorMapSize; i++) {\r
+if (this.palette[i] != null) p = this.palette[i];\r
+this.putByte (Clazz.floatToInt (p.x));\r
+this.putByte (Clazz.floatToInt (p.y));\r
+this.putByte (Clazz.floatToInt (p.z));\r
+}\r
+this.putByte (this.initCodeSize = (this.bitsPerPixel <= 1 ? 2 : this.bitsPerPixel));\r
+this.compress ();\r
+this.putByte (0);\r
+}, $fz.isPrivate = true, $fz));\r
+Clazz.defineMethod (c$, "writeTrailer", \r
+($fz = function () {\r
+this.putByte (0x3B);\r
+}, $fz.isPrivate = true, $fz));\r
+Clazz.defineMethod (c$, "nextPixel", \r
+($fz = function () {\r
+if (this.countDown-- == 0) return -1;\r
+var colorIndex = this.pixels[this.curpt];\r
+++this.curx;\r
+if (this.curx == this.width) {\r
+this.curx = 0;\r
+if (this.interlaced) this.updateY (javajs.img.GifEncoder.INTERLACE_PARAMS[this.pass], javajs.img.GifEncoder.INTERLACE_PARAMS[this.pass + 4]);\r
+ else ++this.cury;\r
+}this.curpt = this.cury * this.width + this.curx;\r
+return colorIndex & 0xff;\r
+}, $fz.isPrivate = true, $fz));\r
+Clazz.defineMethod (c$, "updateY", \r
+($fz = function (yNext, yNew) {\r
+this.cury += yNext;\r
+if (yNew >= 0 && this.cury >= this.height) {\r
+this.cury = yNew;\r
+++this.pass;\r
+}}, $fz.isPrivate = true, $fz), "~N,~N");\r
+Clazz.defineMethod (c$, "putWord", \r
+($fz = function (w) {\r
+this.putByte (w);\r
+this.putByte (w >> 8);\r
+}, $fz.isPrivate = true, $fz), "~N");\r
+c$.MAXCODE = Clazz.defineMethod (c$, "MAXCODE", \r
+($fz = function (nBits) {\r
+return (1 << nBits) - 1;\r
+}, $fz.isPrivate = true, $fz), "~N");\r
+Clazz.defineMethod (c$, "compress", \r
+($fz = function () {\r
+this.countDown = this.width * this.height;\r
+this.pass = 0;\r
+this.curx = 0;\r
+this.cury = 0;\r
+this.clearFlag = false;\r
+this.nBits = this.initCodeSize + 1;\r
+this.maxcode = javajs.img.GifEncoder.MAXCODE (this.nBits);\r
+this.clearCode = 1 << this.initCodeSize;\r
+this.EOFCode = this.clearCode + 1;\r
+this.freeEnt = this.clearCode + 2;\r
+this.bufPt = 0;\r
+var ent = this.nextPixel ();\r
+var hshift = 0;\r
+var fcode;\r
+for (fcode = this.hsize; fcode < 65536; fcode *= 2) ++hshift;\r
+\r
+hshift = 8 - hshift;\r
+var hsizeReg = this.hsize;\r
+this.clearHash (hsizeReg);\r
+this.output (this.clearCode);\r
+var c;\r
+outer_loop : while ((c = this.nextPixel ()) != -1) {\r
+fcode = (c << this.maxbits) + ent;\r
+var i = (c << hshift) ^ ent;\r
+if (this.htab[i] == fcode) {\r
+ent = this.codetab[i];\r
+continue;\r
+} else if (this.htab[i] >= 0) {\r
+var disp = hsizeReg - i;\r
+if (i == 0) disp = 1;\r
+do {\r
+if ((i -= disp) < 0) i += hsizeReg;\r
+if (this.htab[i] == fcode) {\r
+ent = this.codetab[i];\r
+continue outer_loop;\r
+}} while (this.htab[i] >= 0);\r
+}this.output (ent);\r
+ent = c;\r
+if (this.freeEnt < this.maxmaxcode) {\r
+this.codetab[i] = this.freeEnt++;\r
+this.htab[i] = fcode;\r
+} else {\r
+this.clearBlock ();\r
+}}\r
+this.output (ent);\r
+this.output (this.EOFCode);\r
+}, $fz.isPrivate = true, $fz));\r
+Clazz.defineMethod (c$, "output", \r
+($fz = function (code) {\r
+this.curAccum &= this.masks[this.curBits];\r
+if (this.curBits > 0) this.curAccum |= (code << this.curBits);\r
+ else this.curAccum = code;\r
+this.curBits += this.nBits;\r
+while (this.curBits >= 8) {\r
+this.byteOut ((this.curAccum & 0xff));\r
+this.curAccum >>= 8;\r
+this.curBits -= 8;\r
+}\r
+if (this.freeEnt > this.maxcode || this.clearFlag) {\r
+if (this.clearFlag) {\r
+this.maxcode = javajs.img.GifEncoder.MAXCODE (this.nBits = this.initCodeSize + 1);\r
+this.clearFlag = false;\r
+} else {\r
+++this.nBits;\r
+if (this.nBits == this.maxbits) this.maxcode = this.maxmaxcode;\r
+ else this.maxcode = javajs.img.GifEncoder.MAXCODE (this.nBits);\r
+}}if (code == this.EOFCode) {\r
+while (this.curBits > 0) {\r
+this.byteOut ((this.curAccum & 0xff));\r
+this.curAccum >>= 8;\r
+this.curBits -= 8;\r
+}\r
+this.flushBytes ();\r
+}}, $fz.isPrivate = true, $fz), "~N");\r
+Clazz.defineMethod (c$, "clearBlock", \r
+($fz = function () {\r
+this.clearHash (this.hsize);\r
+this.freeEnt = this.clearCode + 2;\r
+this.clearFlag = true;\r
+this.output (this.clearCode);\r
+}, $fz.isPrivate = true, $fz));\r
+Clazz.defineMethod (c$, "clearHash", \r
+($fz = function (hsize) {\r
+for (var i = 0; i < hsize; ++i) this.htab[i] = -1;\r
+\r
+}, $fz.isPrivate = true, $fz), "~N");\r
+Clazz.defineMethod (c$, "byteOut", \r
+($fz = function (c) {\r
+this.buf[this.bufPt++] = c;\r
+if (this.bufPt >= 254) this.flushBytes ();\r
+}, $fz.isPrivate = true, $fz), "~N");\r
+Clazz.defineMethod (c$, "flushBytes", \r
+function () {\r
+if (this.bufPt > 0) {\r
+this.putByte (this.bufPt);\r
+this.out.write (this.buf, 0, this.bufPt);\r
+this.byteCount += this.bufPt;\r
+this.bufPt = 0;\r
+}});\r
+c$.$GifEncoder$ColorItem$ = function () {\r
+Clazz.pu$h ();\r
+c$ = Clazz.decorateAsClass (function () {\r
+Clazz.prepareCallback (this, arguments);\r
+this.isBackground = false;\r
+Clazz.instantialize (this, arguments);\r
+}, javajs.img.GifEncoder, "ColorItem", javajs.util.P3);\r
+Clazz.makeConstructor (c$, \r
+function (a, b) {\r
+Clazz.superConstructor (this, javajs.img.GifEncoder.ColorItem, []);\r
+this.isBackground = b;\r
+this.setT (this.b$["javajs.img.GifEncoder"].toLABnorm (a));\r
+}, "~N,~B");\r
+c$ = Clazz.p0p ();\r
+};\r
+c$.$GifEncoder$ColorCell$ = function () {\r
+Clazz.pu$h ();\r
+c$ = Clazz.decorateAsClass (function () {\r
+Clazz.prepareCallback (this, arguments);\r
+this.index = 0;\r
+this.center = null;\r
+this.volume = 0;\r
+Clazz.instantialize (this, arguments);\r
+}, javajs.img.GifEncoder, "ColorCell", javajs.util.Lst);\r
+Clazz.makeConstructor (c$, \r
+function (a) {\r
+Clazz.superConstructor (this, javajs.img.GifEncoder.ColorCell, []);\r
+this.index = a;\r
+}, "~N");\r
+Clazz.defineMethod (c$, "getVolume", \r
+function (a) {\r
+if (this.volume != 0) return this.volume;\r
+if (this.size () < 2) return -1;\r
+var b = -2147483647;\r
+var c = 2147483647;\r
+var d = -2147483647;\r
+var e = 2147483647;\r
+var f = -2147483647;\r
+var g = 2147483647;\r
+var h = this.size ();\r
+for (var i = h; --i >= 0; ) {\r
+var j = this.get (i);\r
+if (j.x < c) c = j.x;\r
+if (j.y < e) e = j.y;\r
+if (j.z < g) g = j.z;\r
+if (j.x > b) b = j.x;\r
+if (j.y > d) d = j.y;\r
+if (j.z > f) f = j.z;\r
+}\r
+var j = (b - c);\r
+var k = (d - e);\r
+var l = (f - g);\r
+return this.volume = j * j + k * k + l * l;\r
+}, "~B");\r
+Clazz.defineMethod (c$, "setColor", \r
+function () {\r
+var a = this.size ();\r
+this.center =  new javajs.util.P3 ();\r
+for (var b = a; --b >= 0; ) this.center.add (this.get (b));\r
+\r
+this.center.scale (1 / a);\r
+return this.b$["javajs.img.GifEncoder"].toRGB (this.center);\r
+});\r
+Clazz.defineMethod (c$, "splitCell", \r
+function (a) {\r
+var b = this.size ();\r
+if (b < 2) return false;\r
+var c = a.size ();\r
+var d = Clazz.innerTypeInstance (javajs.img.GifEncoder.ColorCell, this, null, c);\r
+a.addLast (d);\r
+var e =  Clazz.newFloatArray (3, 3, 0);\r
+for (var f = 0; f < 3; f++) {\r
+var g = 3.4028235E38;\r
+var h = -3.4028235E38;\r
+for (var i = b; --i >= 0; ) {\r
+var j = this.get (i);\r
+var k = (f == 0 ? j.x : f == 1 ? j.y : j.z);\r
+if (g > k) g = k;\r
+if (h < k) h = k;\r
+}\r
+e[0][f] = g;\r
+e[1][f] = h;\r
+e[2][f] = h - g;\r
+}\r
+var g = e[2];\r
+var h = (g[0] >= g[1] ? (g[0] >= g[2] ? 0 : 2) : g[1] >= g[2] ? 1 : 2);\r
+var i = e[0][h] + e[2][h] / 2;\r
+this.volume = 0;\r
+switch (h) {\r
+case 0:\r
+for (var j = b; --j >= 0; ) if (this.get (j).x >= i) d.addLast (this.remove (j));\r
+\r
+break;\r
+case 1:\r
+for (var k = b; --k >= 0; ) if (this.get (k).y >= i) d.addLast (this.remove (k));\r
+\r
+break;\r
+case 2:\r
+for (var l = this.size (); --l >= 0; ) if (this.get (l).z >= i) d.addLast (this.remove (l));\r
+\r
+break;\r
+}\r
+return true;\r
+}, "javajs.util.Lst");\r
+c$ = Clazz.p0p ();\r
+};\r
+Clazz.defineStatics (c$,\r
+"xyz2rgb", null,\r
+"rgb2xyz", null);\r
+{\r
+javajs.img.GifEncoder.rgb2xyz = javajs.util.M3.newA9 ( Clazz.newFloatArray (-1, [0.4124, 0.3576, 0.1805, 0.2126, 0.7152, 0.0722, 0.0193, 0.1192, 0.9505]));\r
+javajs.img.GifEncoder.xyz2rgb = javajs.util.M3.newA9 ( Clazz.newFloatArray (-1, [3.2406, -1.5372, -0.4986, -0.9689, 1.8758, 0.0415, 0.0557, -0.204, 1.0570]));\r
+}Clazz.defineStatics (c$,\r
+"EOF", -1,\r
+"INTERLACE_PARAMS",  Clazz.newIntArray (-1, [8, 8, 4, 2, 4, 2, 1, 0]),\r
+"BITS", 12,\r
+"HSIZE", 5003);\r
+});\r