JAL-1807 includes ?j2sdebug flag and DebugJS._(msg)
[jalviewjs.git] / bin / javajs / img / GifEncoder.js
index dd22f43..9170951 100644 (file)
-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
+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);
+});