Merge branch 'master' of https://source.jalview.org/git/jalviewjs.git
[jalviewjs.git] / site / j2s / jssun / awt / image / BytePackedRaster.js
index b08ee45..107091d 100644 (file)
-Clazz.declarePackage ("jssun.awt.image");\r
-Clazz.load (["jssun.awt.image.SunWritableRaster"], "jssun.awt.image.BytePackedRaster", ["java.lang.ArrayIndexOutOfBoundsException", "java.awt.Point", "$.Rectangle", "java.awt.image.DataBufferByte", "$.MultiPixelPackedSampleModel", "$.RasterFormatException"], function () {\r
-c$ = Clazz.decorateAsClass (function () {\r
-this.dataBitOffset = 0;\r
-this.scanlineStride = 0;\r
-this.pixelBitStride = 0;\r
-this.bitMask = 0;\r
-this.data = null;\r
-this.shiftOffset = 0;\r
-this.type = 0;\r
-this.maxX = 0;\r
-this.maxY = 0;\r
-Clazz.instantialize (this, arguments);\r
-}, jssun.awt.image, "BytePackedRaster", jssun.awt.image.SunWritableRaster);\r
-Clazz.makeConstructor (c$, \r
-function (sampleModel, origin) {\r
-this.construct (sampleModel, sampleModel.createDataBuffer (),  new java.awt.Rectangle (origin.x, origin.y, sampleModel.getWidth (), sampleModel.getHeight ()), origin, null);\r
-}, "java.awt.image.SampleModel,java.awt.Point");\r
-Clazz.makeConstructor (c$, \r
-function (sampleModel, dataBuffer, origin) {\r
-this.construct (sampleModel, dataBuffer,  new java.awt.Rectangle (origin.x, origin.y, sampleModel.getWidth (), sampleModel.getHeight ()), origin, null);\r
-}, "java.awt.image.SampleModel,java.awt.image.DataBuffer,java.awt.Point");\r
-Clazz.makeConstructor (c$, \r
-function (sampleModel, dataBuffer, aRegion, origin, parent) {\r
-Clazz.superConstructor (this, jssun.awt.image.BytePackedRaster, [sampleModel, dataBuffer, aRegion, origin, parent]);\r
-this.maxX = this.minX + this.width;\r
-this.maxY = this.minY + this.height;\r
-if (!(Clazz.instanceOf (dataBuffer, java.awt.image.DataBufferByte))) {\r
-throw  new java.awt.image.RasterFormatException ("BytePackedRasters must havebyte DataBuffers");\r
-}var dbb = dataBuffer;\r
-this.data = jssun.awt.image.SunWritableRaster.stealData (dbb, 0);\r
-if (dbb.getNumBanks () != 1) {\r
-throw  new java.awt.image.RasterFormatException ("DataBuffer for BytePackedRasters must only have 1 bank.");\r
-}var dbOffset = dbb.getOffset ();\r
-if (Clazz.instanceOf (sampleModel, java.awt.image.MultiPixelPackedSampleModel)) {\r
-var mppsm = sampleModel;\r
-this.pixelBitStride = mppsm.getPixelBitStride ();\r
-if (this.pixelBitStride != 1 && this.pixelBitStride != 2 && this.pixelBitStride != 4) {\r
-throw  new java.awt.image.RasterFormatException ("BytePackedRasters must have a bit depth of 1, 2, or 4");\r
-}this.scanlineStride = mppsm.getScanlineStride ();\r
-this.dataBitOffset = mppsm.getDataBitOffset () + dbOffset * 8;\r
-var xOffset = aRegion.x - origin.x;\r
-var yOffset = aRegion.y - origin.y;\r
-this.dataBitOffset += xOffset * this.pixelBitStride + yOffset * this.scanlineStride * 8;\r
-this.bitMask = (1 << this.pixelBitStride) - 1;\r
-this.shiftOffset = 8 - this.pixelBitStride;\r
-} else {\r
-throw  new java.awt.image.RasterFormatException ("BytePackedRasters must haveMultiPixelPackedSampleModel");\r
-}this.verify (false);\r
-}, "java.awt.image.SampleModel,java.awt.image.DataBuffer,java.awt.Rectangle,java.awt.Point,jssun.awt.image.BytePackedRaster");\r
-Clazz.defineMethod (c$, "getDataBitOffset", \r
-function () {\r
-return this.dataBitOffset;\r
-});\r
-Clazz.defineMethod (c$, "getScanlineStride", \r
-function () {\r
-return this.scanlineStride;\r
-});\r
-Clazz.defineMethod (c$, "getPixelBitStride", \r
-function () {\r
-return this.pixelBitStride;\r
-});\r
-Clazz.defineMethod (c$, "getDataStorage", \r
-function () {\r
-return this.data;\r
-});\r
-Clazz.defineMethod (c$, "getDataElements", \r
-function (x, y, obj) {\r
-if ((x < this.minX) || (y < this.minY) || (x >= this.maxX) || (y >= this.maxY)) {\r
-throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");\r
-}var outData;\r
-if (obj == null) {\r
-outData =  Clazz.newByteArray (this.numDataElements, 0);\r
-} else {\r
-outData = obj;\r
-}var bitnum = this.dataBitOffset + (x - this.minX) * this.pixelBitStride;\r
-var element = this.data[(y - this.minY) * this.scanlineStride + (bitnum >> 3)] & 0xff;\r
-var shift = this.shiftOffset - (bitnum & 7);\r
-outData[0] = ((element >> shift) & this.bitMask);\r
-return outData;\r
-}, "~N,~N,~O");\r
-Clazz.defineMethod (c$, "getDataElements", \r
-function (x, y, w, h, outData) {\r
-return this.getByteData (x, y, w, h, outData);\r
-}, "~N,~N,~N,~N,~O");\r
-Clazz.defineMethod (c$, "getPixelData", \r
-function (x, y, w, h, obj) {\r
-if ((x < this.minX) || (y < this.minY) || (x + w > this.maxX) || (y + h > this.maxY)) {\r
-throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");\r
-}var outData;\r
-if (obj == null) {\r
-outData =  Clazz.newByteArray (this.numDataElements * w * h, 0);\r
-} else {\r
-outData = obj;\r
-}var pixbits = this.pixelBitStride;\r
-var scanbit = this.dataBitOffset + (x - this.minX) * pixbits;\r
-var index = (y - this.minY) * this.scanlineStride;\r
-var outindex = 0;\r
-var data = this.data;\r
-for (var j = 0; j < h; j++) {\r
-var bitnum = scanbit;\r
-for (var i = 0; i < w; i++) {\r
-var shift = this.shiftOffset - (bitnum & 7);\r
-outData[outindex++] = (this.bitMask & (data[index + (bitnum >> 3)] >> shift));\r
-bitnum += pixbits;\r
-}\r
-index += this.scanlineStride;\r
-}\r
-return outData;\r
-}, "~N,~N,~N,~N,~O");\r
-Clazz.defineMethod (c$, "getByteData", \r
-function (x, y, w, h, band, outData) {\r
-return this.getByteData (x, y, w, h, outData);\r
-}, "~N,~N,~N,~N,~N,~A");\r
-Clazz.defineMethod (c$, "getByteData", \r
-function (x, y, w, h, outData) {\r
-if ((x < this.minX) || (y < this.minY) || (x + w > this.maxX) || (y + h > this.maxY)) {\r
-throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");\r
-}if (outData == null) {\r
-outData =  Clazz.newByteArray (w * h, 0);\r
-}var pixbits = this.pixelBitStride;\r
-var scanbit = this.dataBitOffset + (x - this.minX) * pixbits;\r
-var index = (y - this.minY) * this.scanlineStride;\r
-var outindex = 0;\r
-var data = this.data;\r
-for (var j = 0; j < h; j++) {\r
-var bitnum = scanbit;\r
-var element;\r
-var i = 0;\r
-while ((i < w) && ((bitnum & 7) != 0)) {\r
-var shift = this.shiftOffset - (bitnum & 7);\r
-outData[outindex++] = (this.bitMask & (data[index + (bitnum >> 3)] >> shift));\r
-bitnum += pixbits;\r
-i++;\r
-}\r
-var inIndex = index + (bitnum >> 3);\r
-switch (pixbits) {\r
-case 1:\r
-for (; i < w - 7; i += 8) {\r
-element = data[inIndex++];\r
-outData[outindex++] = ((element >> 7) & 1);\r
-outData[outindex++] = ((element >> 6) & 1);\r
-outData[outindex++] = ((element >> 5) & 1);\r
-outData[outindex++] = ((element >> 4) & 1);\r
-outData[outindex++] = ((element >> 3) & 1);\r
-outData[outindex++] = ((element >> 2) & 1);\r
-outData[outindex++] = ((element >> 1) & 1);\r
-outData[outindex++] = (element & 1);\r
-bitnum += 8;\r
-}\r
-break;\r
-case 2:\r
-for (; i < w - 7; i += 8) {\r
-element = data[inIndex++];\r
-outData[outindex++] = ((element >> 6) & 3);\r
-outData[outindex++] = ((element >> 4) & 3);\r
-outData[outindex++] = ((element >> 2) & 3);\r
-outData[outindex++] = (element & 3);\r
-element = data[inIndex++];\r
-outData[outindex++] = ((element >> 6) & 3);\r
-outData[outindex++] = ((element >> 4) & 3);\r
-outData[outindex++] = ((element >> 2) & 3);\r
-outData[outindex++] = (element & 3);\r
-bitnum += 16;\r
-}\r
-break;\r
-case 4:\r
-for (; i < w - 7; i += 8) {\r
-element = data[inIndex++];\r
-outData[outindex++] = ((element >> 4) & 0xf);\r
-outData[outindex++] = (element & 0xf);\r
-element = data[inIndex++];\r
-outData[outindex++] = ((element >> 4) & 0xf);\r
-outData[outindex++] = (element & 0xf);\r
-element = data[inIndex++];\r
-outData[outindex++] = ((element >> 4) & 0xf);\r
-outData[outindex++] = (element & 0xf);\r
-element = data[inIndex++];\r
-outData[outindex++] = ((element >> 4) & 0xf);\r
-outData[outindex++] = (element & 0xf);\r
-bitnum += 32;\r
-}\r
-break;\r
-}\r
-for (; i < w; i++) {\r
-var shift = this.shiftOffset - (bitnum & 7);\r
-outData[outindex++] = (this.bitMask & (data[index + (bitnum >> 3)] >> shift));\r
-bitnum += pixbits;\r
-}\r
-index += this.scanlineStride;\r
-}\r
-return outData;\r
-}, "~N,~N,~N,~N,~A");\r
-Clazz.defineMethod (c$, "setDataElements", \r
-function (x, y, obj) {\r
-if ((x < this.minX) || (y < this.minY) || (x >= this.maxX) || (y >= this.maxY)) {\r
-throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");\r
-}var inData = obj;\r
-var bitnum = this.dataBitOffset + (x - this.minX) * this.pixelBitStride;\r
-var index = (y - this.minY) * this.scanlineStride + (bitnum >> 3);\r
-var shift = this.shiftOffset - (bitnum & 7);\r
-var element = this.data[index];\r
-element &= ~(this.bitMask << shift);\r
-element |= (inData[0] & this.bitMask) << shift;\r
-this.data[index] = element;\r
-this.markDirty ();\r
-}, "~N,~N,~O");\r
-Clazz.defineMethod (c$, "setDataElements", \r
-function (x, y, inRaster) {\r
-if (!(Clazz.instanceOf (inRaster, jssun.awt.image.BytePackedRaster)) || (inRaster).pixelBitStride != this.pixelBitStride) {\r
-Clazz.superCall (this, jssun.awt.image.BytePackedRaster, "setDataElements", [x, y, inRaster]);\r
-return;\r
-}var srcOffX = inRaster.getMinX ();\r
-var srcOffY = inRaster.getMinY ();\r
-var dstOffX = srcOffX + x;\r
-var dstOffY = srcOffY + y;\r
-var width = inRaster.getWidth ();\r
-var height = inRaster.getHeight ();\r
-if ((dstOffX < this.minX) || (dstOffY < this.minY) || (dstOffX + width > this.maxX) || (dstOffY + height > this.maxY)) {\r
-throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");\r
-}this.setDataElements (dstOffX, dstOffY, srcOffX, srcOffY, width, height, inRaster);\r
-}, "~N,~N,java.awt.image.Raster");\r
-Clazz.defineMethod (c$, "setDataElements", \r
- function (dstX, dstY, srcX, srcY, width, height, inRaster) {\r
-if (width <= 0 || height <= 0) {\r
-return;\r
-}var inData = inRaster.data;\r
-var outData = this.data;\r
-var inscan = inRaster.scanlineStride;\r
-var outscan = this.scanlineStride;\r
-var inbit = inRaster.dataBitOffset + 8 * (srcY - inRaster.minY) * inscan + (srcX - inRaster.minX) * inRaster.pixelBitStride;\r
-var outbit = (this.dataBitOffset + 8 * (dstY - this.minY) * outscan + (dstX - this.minX) * this.pixelBitStride);\r
-var copybits = width * this.pixelBitStride;\r
-if ((inbit & 7) == (outbit & 7)) {\r
-var bitpos = outbit & 7;\r
-if (bitpos != 0) {\r
-var bits = 8 - bitpos;\r
-var inbyte = inbit >> 3;\r
-var outbyte = outbit >> 3;\r
-var mask = 0xff >> bitpos;\r
-if (copybits < bits) {\r
-mask &= 0xff << (bits - copybits);\r
-bits = copybits;\r
-}for (var j = 0; j < height; j++) {\r
-var element = outData[outbyte];\r
-element &= ~mask;\r
-element |= (inData[inbyte] & mask);\r
-outData[outbyte] = element;\r
-inbyte += inscan;\r
-outbyte += outscan;\r
-}\r
-inbit += bits;\r
-outbit += bits;\r
-copybits -= bits;\r
-}if (copybits >= 8) {\r
-var inbyte = inbit >> 3;\r
-var outbyte = outbit >> 3;\r
-var copybytes = copybits >> 3;\r
-if (copybytes == inscan && inscan == outscan) {\r
-System.arraycopy (inData, inbyte, outData, outbyte, inscan * height);\r
-} else {\r
-for (var j = 0; j < height; j++) {\r
-System.arraycopy (inData, inbyte, outData, outbyte, copybytes);\r
-inbyte += inscan;\r
-outbyte += outscan;\r
-}\r
-}var bits = copybytes * 8;\r
-inbit += bits;\r
-outbit += bits;\r
-copybits -= bits;\r
-}if (copybits > 0) {\r
-var inbyte = inbit >> 3;\r
-var outbyte = outbit >> 3;\r
-var mask = (0xff00 >> copybits) & 0xff;\r
-for (var j = 0; j < height; j++) {\r
-var element = outData[outbyte];\r
-element &= ~mask;\r
-element |= (inData[inbyte] & mask);\r
-outData[outbyte] = element;\r
-inbyte += inscan;\r
-outbyte += outscan;\r
-}\r
-}} else {\r
-var bitpos = outbit & 7;\r
-if (bitpos != 0 || copybits < 8) {\r
-var bits = 8 - bitpos;\r
-var inbyte = inbit >> 3;\r
-var outbyte = outbit >> 3;\r
-var lshift = inbit & 7;\r
-var rshift = 8 - lshift;\r
-var mask = 0xff >> bitpos;\r
-if (copybits < bits) {\r
-mask &= 0xff << (bits - copybits);\r
-bits = copybits;\r
-}var lastByte = inData.length - 1;\r
-for (var j = 0; j < height; j++) {\r
-var inData0 = inData[inbyte];\r
-var inData1 = 0;\r
-if (inbyte < lastByte) {\r
-inData1 = inData[inbyte + 1];\r
-}var element = outData[outbyte];\r
-element &= ~mask;\r
-element |= (((inData0 << lshift) | ((inData1 & 0xff) >> rshift)) >> bitpos) & mask;\r
-outData[outbyte] = element;\r
-inbyte += inscan;\r
-outbyte += outscan;\r
-}\r
-inbit += bits;\r
-outbit += bits;\r
-copybits -= bits;\r
-}if (copybits >= 8) {\r
-var inbyte = inbit >> 3;\r
-var outbyte = outbit >> 3;\r
-var copybytes = copybits >> 3;\r
-var lshift = inbit & 7;\r
-var rshift = 8 - lshift;\r
-for (var j = 0; j < height; j++) {\r
-var ibyte = inbyte + j * inscan;\r
-var obyte = outbyte + j * outscan;\r
-var inData0 = inData[ibyte];\r
-for (var i = 0; i < copybytes; i++) {\r
-var inData1 = inData[ibyte + 1];\r
-var val = (inData0 << lshift) | ((inData1 & 0xff) >> rshift);\r
-outData[obyte] = val;\r
-inData0 = inData1;\r
-++ibyte;\r
-++obyte;\r
-}\r
-}\r
-var bits = copybytes * 8;\r
-inbit += bits;\r
-outbit += bits;\r
-copybits -= bits;\r
-}if (copybits > 0) {\r
-var inbyte = inbit >> 3;\r
-var outbyte = outbit >> 3;\r
-var mask = (0xff00 >> copybits) & 0xff;\r
-var lshift = inbit & 7;\r
-var rshift = 8 - lshift;\r
-var lastByte = inData.length - 1;\r
-for (var j = 0; j < height; j++) {\r
-var inData0 = inData[inbyte];\r
-var inData1 = 0;\r
-if (inbyte < lastByte) {\r
-inData1 = inData[inbyte + 1];\r
-}var element = outData[outbyte];\r
-element &= ~mask;\r
-element |= ((inData0 << lshift) | ((inData1 & 0xff) >> rshift)) & mask;\r
-outData[outbyte] = element;\r
-inbyte += inscan;\r
-outbyte += outscan;\r
-}\r
-}}this.markDirty ();\r
-}, "~N,~N,~N,~N,~N,~N,jssun.awt.image.BytePackedRaster");\r
-Clazz.defineMethod (c$, "setRect", \r
-function (dx, dy, srcRaster) {\r
-if (!(Clazz.instanceOf (srcRaster, jssun.awt.image.BytePackedRaster)) || (srcRaster).pixelBitStride != this.pixelBitStride) {\r
-Clazz.superCall (this, jssun.awt.image.BytePackedRaster, "setRect", [dx, dy, srcRaster]);\r
-return;\r
-}var width = srcRaster.getWidth ();\r
-var height = srcRaster.getHeight ();\r
-var srcOffX = srcRaster.getMinX ();\r
-var srcOffY = srcRaster.getMinY ();\r
-var dstOffX = dx + srcOffX;\r
-var dstOffY = dy + srcOffY;\r
-if (dstOffX < this.minX) {\r
-var skipX = this.minX - dstOffX;\r
-width -= skipX;\r
-srcOffX += skipX;\r
-dstOffX = this.minX;\r
-}if (dstOffY < this.minY) {\r
-var skipY = this.minY - dstOffY;\r
-height -= skipY;\r
-srcOffY += skipY;\r
-dstOffY = this.minY;\r
-}if (dstOffX + width > this.maxX) {\r
-width = this.maxX - dstOffX;\r
-}if (dstOffY + height > this.maxY) {\r
-height = this.maxY - dstOffY;\r
-}this.setDataElements (dstOffX, dstOffY, srcOffX, srcOffY, width, height, srcRaster);\r
-}, "~N,~N,java.awt.image.Raster");\r
-Clazz.defineMethod (c$, "setDataElements", \r
-function (x, y, w, h, obj) {\r
-this.putByteData (x, y, w, h, obj);\r
-}, "~N,~N,~N,~N,~O");\r
-Clazz.defineMethod (c$, "putByteData", \r
-function (x, y, w, h, band, inData) {\r
-this.putByteData (x, y, w, h, inData);\r
-}, "~N,~N,~N,~N,~N,~A");\r
-Clazz.defineMethod (c$, "putByteData", \r
-function (x, y, w, h, inData) {\r
-if ((x < this.minX) || (y < this.minY) || (x + w > this.maxX) || (y + h > this.maxY)) {\r
-throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");\r
-}if (w == 0 || h == 0) {\r
-return;\r
-}var pixbits = this.pixelBitStride;\r
-var scanbit = this.dataBitOffset + (x - this.minX) * pixbits;\r
-var index = (y - this.minY) * this.scanlineStride;\r
-var outindex = 0;\r
-var data = this.data;\r
-for (var j = 0; j < h; j++) {\r
-var bitnum = scanbit;\r
-var element;\r
-var i = 0;\r
-while ((i < w) && ((bitnum & 7) != 0)) {\r
-var shift = this.shiftOffset - (bitnum & 7);\r
-element = data[index + (bitnum >> 3)];\r
-element &= ~(this.bitMask << shift);\r
-element |= (inData[outindex++] & this.bitMask) << shift;\r
-data[index + (bitnum >> 3)] = element;\r
-bitnum += pixbits;\r
-i++;\r
-}\r
-var inIndex = index + (bitnum >> 3);\r
-switch (pixbits) {\r
-case 1:\r
-for (; i < w - 7; i += 8) {\r
-element = (inData[outindex++] & 1) << 7;\r
-element |= (inData[outindex++] & 1) << 6;\r
-element |= (inData[outindex++] & 1) << 5;\r
-element |= (inData[outindex++] & 1) << 4;\r
-element |= (inData[outindex++] & 1) << 3;\r
-element |= (inData[outindex++] & 1) << 2;\r
-element |= (inData[outindex++] & 1) << 1;\r
-element |= (inData[outindex++] & 1);\r
-data[inIndex++] = element;\r
-bitnum += 8;\r
-}\r
-break;\r
-case 2:\r
-for (; i < w - 7; i += 8) {\r
-element = (inData[outindex++] & 3) << 6;\r
-element |= (inData[outindex++] & 3) << 4;\r
-element |= (inData[outindex++] & 3) << 2;\r
-element |= (inData[outindex++] & 3);\r
-data[inIndex++] = element;\r
-element = (inData[outindex++] & 3) << 6;\r
-element |= (inData[outindex++] & 3) << 4;\r
-element |= (inData[outindex++] & 3) << 2;\r
-element |= (inData[outindex++] & 3);\r
-data[inIndex++] = element;\r
-bitnum += 16;\r
-}\r
-break;\r
-case 4:\r
-for (; i < w - 7; i += 8) {\r
-element = (inData[outindex++] & 0xf) << 4;\r
-element |= (inData[outindex++] & 0xf);\r
-data[inIndex++] = element;\r
-element = (inData[outindex++] & 0xf) << 4;\r
-element |= (inData[outindex++] & 0xf);\r
-data[inIndex++] = element;\r
-element = (inData[outindex++] & 0xf) << 4;\r
-element |= (inData[outindex++] & 0xf);\r
-data[inIndex++] = element;\r
-element = (inData[outindex++] & 0xf) << 4;\r
-element |= (inData[outindex++] & 0xf);\r
-data[inIndex++] = element;\r
-bitnum += 32;\r
-}\r
-break;\r
-}\r
-for (; i < w; i++) {\r
-var shift = this.shiftOffset - (bitnum & 7);\r
-element = data[index + (bitnum >> 3)];\r
-element &= ~(this.bitMask << shift);\r
-element |= (inData[outindex++] & this.bitMask) << shift;\r
-data[index + (bitnum >> 3)] = element;\r
-bitnum += pixbits;\r
-}\r
-index += this.scanlineStride;\r
-}\r
-this.markDirty ();\r
-}, "~N,~N,~N,~N,~A");\r
-Clazz.defineMethod (c$, "getPixels", \r
-function (x, y, w, h, iArray) {\r
-if ((x < this.minX) || (y < this.minY) || (x + w > this.maxX) || (y + h > this.maxY)) {\r
-throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");\r
-}if (iArray == null) {\r
-iArray =  Clazz.newIntArray (w * h, 0);\r
-}var pixbits = this.pixelBitStride;\r
-var scanbit = this.dataBitOffset + (x - this.minX) * pixbits;\r
-var index = (y - this.minY) * this.scanlineStride;\r
-var outindex = 0;\r
-var data = this.data;\r
-for (var j = 0; j < h; j++) {\r
-var bitnum = scanbit;\r
-var element;\r
-var i = 0;\r
-while ((i < w) && ((bitnum & 7) != 0)) {\r
-var shift = this.shiftOffset - (bitnum & 7);\r
-iArray[outindex++] = this.bitMask & (data[index + (bitnum >> 3)] >> shift);\r
-bitnum += pixbits;\r
-i++;\r
-}\r
-var inIndex = index + (bitnum >> 3);\r
-switch (pixbits) {\r
-case 1:\r
-for (; i < w - 7; i += 8) {\r
-element = data[inIndex++];\r
-iArray[outindex++] = (element >> 7) & 1;\r
-iArray[outindex++] = (element >> 6) & 1;\r
-iArray[outindex++] = (element >> 5) & 1;\r
-iArray[outindex++] = (element >> 4) & 1;\r
-iArray[outindex++] = (element >> 3) & 1;\r
-iArray[outindex++] = (element >> 2) & 1;\r
-iArray[outindex++] = (element >> 1) & 1;\r
-iArray[outindex++] = element & 1;\r
-bitnum += 8;\r
-}\r
-break;\r
-case 2:\r
-for (; i < w - 7; i += 8) {\r
-element = data[inIndex++];\r
-iArray[outindex++] = (element >> 6) & 3;\r
-iArray[outindex++] = (element >> 4) & 3;\r
-iArray[outindex++] = (element >> 2) & 3;\r
-iArray[outindex++] = element & 3;\r
-element = data[inIndex++];\r
-iArray[outindex++] = (element >> 6) & 3;\r
-iArray[outindex++] = (element >> 4) & 3;\r
-iArray[outindex++] = (element >> 2) & 3;\r
-iArray[outindex++] = element & 3;\r
-bitnum += 16;\r
-}\r
-break;\r
-case 4:\r
-for (; i < w - 7; i += 8) {\r
-element = data[inIndex++];\r
-iArray[outindex++] = (element >> 4) & 0xf;\r
-iArray[outindex++] = element & 0xf;\r
-element = data[inIndex++];\r
-iArray[outindex++] = (element >> 4) & 0xf;\r
-iArray[outindex++] = element & 0xf;\r
-element = data[inIndex++];\r
-iArray[outindex++] = (element >> 4) & 0xf;\r
-iArray[outindex++] = element & 0xf;\r
-element = data[inIndex++];\r
-iArray[outindex++] = (element >> 4) & 0xf;\r
-iArray[outindex++] = element & 0xf;\r
-bitnum += 32;\r
-}\r
-break;\r
-}\r
-for (; i < w; i++) {\r
-var shift = this.shiftOffset - (bitnum & 7);\r
-iArray[outindex++] = this.bitMask & (data[index + (bitnum >> 3)] >> shift);\r
-bitnum += pixbits;\r
-}\r
-index += this.scanlineStride;\r
-}\r
-return iArray;\r
-}, "~N,~N,~N,~N,~A");\r
-Clazz.defineMethod (c$, "setPixels", \r
-function (x, y, w, h, iArray) {\r
-if ((x < this.minX) || (y < this.minY) || (x + w > this.maxX) || (y + h > this.maxY)) {\r
-throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");\r
-}var pixbits = this.pixelBitStride;\r
-var scanbit = this.dataBitOffset + (x - this.minX) * pixbits;\r
-var index = (y - this.minY) * this.scanlineStride;\r
-var outindex = 0;\r
-var data = this.data;\r
-for (var j = 0; j < h; j++) {\r
-var bitnum = scanbit;\r
-var element;\r
-var i = 0;\r
-while ((i < w) && ((bitnum & 7) != 0)) {\r
-var shift = this.shiftOffset - (bitnum & 7);\r
-element = data[index + (bitnum >> 3)];\r
-element &= ~(this.bitMask << shift);\r
-element |= (iArray[outindex++] & this.bitMask) << shift;\r
-data[index + (bitnum >> 3)] = element;\r
-bitnum += pixbits;\r
-i++;\r
-}\r
-var inIndex = index + (bitnum >> 3);\r
-switch (pixbits) {\r
-case 1:\r
-for (; i < w - 7; i += 8) {\r
-element = (iArray[outindex++] & 1) << 7;\r
-element |= (iArray[outindex++] & 1) << 6;\r
-element |= (iArray[outindex++] & 1) << 5;\r
-element |= (iArray[outindex++] & 1) << 4;\r
-element |= (iArray[outindex++] & 1) << 3;\r
-element |= (iArray[outindex++] & 1) << 2;\r
-element |= (iArray[outindex++] & 1) << 1;\r
-element |= (iArray[outindex++] & 1);\r
-data[inIndex++] = element;\r
-bitnum += 8;\r
-}\r
-break;\r
-case 2:\r
-for (; i < w - 7; i += 8) {\r
-element = (iArray[outindex++] & 3) << 6;\r
-element |= (iArray[outindex++] & 3) << 4;\r
-element |= (iArray[outindex++] & 3) << 2;\r
-element |= (iArray[outindex++] & 3);\r
-data[inIndex++] = element;\r
-element = (iArray[outindex++] & 3) << 6;\r
-element |= (iArray[outindex++] & 3) << 4;\r
-element |= (iArray[outindex++] & 3) << 2;\r
-element |= (iArray[outindex++] & 3);\r
-data[inIndex++] = element;\r
-bitnum += 16;\r
-}\r
-break;\r
-case 4:\r
-for (; i < w - 7; i += 8) {\r
-element = (iArray[outindex++] & 0xf) << 4;\r
-element |= (iArray[outindex++] & 0xf);\r
-data[inIndex++] = element;\r
-element = (iArray[outindex++] & 0xf) << 4;\r
-element |= (iArray[outindex++] & 0xf);\r
-data[inIndex++] = element;\r
-element = (iArray[outindex++] & 0xf) << 4;\r
-element |= (iArray[outindex++] & 0xf);\r
-data[inIndex++] = element;\r
-element = (iArray[outindex++] & 0xf) << 4;\r
-element |= (iArray[outindex++] & 0xf);\r
-data[inIndex++] = element;\r
-bitnum += 32;\r
-}\r
-break;\r
-}\r
-for (; i < w; i++) {\r
-var shift = this.shiftOffset - (bitnum & 7);\r
-element = data[index + (bitnum >> 3)];\r
-element &= ~(this.bitMask << shift);\r
-element |= (iArray[outindex++] & this.bitMask) << shift;\r
-data[index + (bitnum >> 3)] = element;\r
-bitnum += pixbits;\r
-}\r
-index += this.scanlineStride;\r
-}\r
-this.markDirty ();\r
-}, "~N,~N,~N,~N,~A");\r
-Clazz.overrideMethod (c$, "createChild", \r
-function (x, y, width, height, x0, y0, bandList) {\r
-var newRaster = this.createWritableChild (x, y, width, height, x0, y0, bandList);\r
-return newRaster;\r
-}, "~N,~N,~N,~N,~N,~N,~A");\r
-Clazz.overrideMethod (c$, "createWritableChild", \r
-function (x, y, width, height, x0, y0, bandList) {\r
-if (x < this.minX) {\r
-throw  new java.awt.image.RasterFormatException ("x lies outside the raster");\r
-}if (y < this.minY) {\r
-throw  new java.awt.image.RasterFormatException ("y lies outside the raster");\r
-}if ((x + width < x) || (x + width > this.minX + this.width)) {\r
-throw  new java.awt.image.RasterFormatException ("(x + width) is outside of Raster");\r
-}if ((y + height < y) || (y + height > this.minY + this.height)) {\r
-throw  new java.awt.image.RasterFormatException ("(y + height) is outside of Raster");\r
-}var sm;\r
-if (bandList != null) {\r
-sm = this.sampleModel.createSubsetSampleModel (bandList);\r
-} else {\r
-sm = this.sampleModel;\r
-}var deltaX = x0 - x;\r
-var deltaY = y0 - y;\r
-return  new jssun.awt.image.BytePackedRaster (sm, this.dataBuffer,  new java.awt.Rectangle (x0, y0, width, height),  new java.awt.Point (this.sampleModelTranslateX + deltaX, this.sampleModelTranslateY + deltaY), this);\r
-}, "~N,~N,~N,~N,~N,~N,~A");\r
-Clazz.defineMethod (c$, "createCompatibleWritableRaster", \r
-function (w, h) {\r
-if (w <= 0 || h <= 0) {\r
-throw  new java.awt.image.RasterFormatException ("negative " + ((w <= 0) ? "width" : "height"));\r
-}var sm = this.sampleModel.createCompatibleSampleModel (w, h);\r
-return  new jssun.awt.image.BytePackedRaster (sm,  new java.awt.Point (0, 0));\r
-}, "~N,~N");\r
-Clazz.defineMethod (c$, "createCompatibleWritableRaster", \r
-function () {\r
-return this.createCompatibleWritableRaster (this.width, this.height);\r
-});\r
-Clazz.defineMethod (c$, "verify", \r
- function (strictCheck) {\r
-if (this.dataBitOffset < 0) {\r
-throw  new java.awt.image.RasterFormatException ("Data offsets must be >= 0");\r
-}if (this.width <= 0 || this.height <= 0 || this.height > (Clazz.doubleToInt (2147483647 / this.width))) {\r
-throw  new java.awt.image.RasterFormatException ("Invalid raster dimension");\r
-}if ((this.width - 1) > Clazz.doubleToInt (2147483647 / this.pixelBitStride)) {\r
-throw  new java.awt.image.RasterFormatException ("Invalid raster dimension");\r
-}if (this.minX - this.sampleModelTranslateX < 0 || this.minY - this.sampleModelTranslateY < 0) {\r
-throw  new java.awt.image.RasterFormatException ("Incorrect origin/translate: (" + this.minX + ", " + this.minY + ") / (" + this.sampleModelTranslateX + ", " + this.sampleModelTranslateY + ")");\r
-}if (this.scanlineStride < 0 || this.scanlineStride > (Clazz.doubleToInt (2147483647 / this.height))) {\r
-throw  new java.awt.image.RasterFormatException ("Invalid scanline stride");\r
-}if (this.height > 1 || this.minY - this.sampleModelTranslateY > 0) {\r
-if (this.scanlineStride > this.data.length) {\r
-throw  new java.awt.image.RasterFormatException ("Incorrect scanline stride: " + this.scanlineStride);\r
-}}var lastbit = this.dataBitOffset + (this.height - 1) * this.scanlineStride * 8 + (this.width - 1) * this.pixelBitStride + this.pixelBitStride - 1;\r
-if (lastbit < 0 || Clazz.doubleToInt (lastbit / 8) >= this.data.length) {\r
-throw  new java.awt.image.RasterFormatException ("raster dimensions overflow array bounds");\r
-}if (strictCheck) {\r
-if (this.height > 1) {\r
-lastbit = this.width * this.pixelBitStride - 1;\r
-if (Clazz.doubleToInt (lastbit / 8) >= this.scanlineStride) {\r
-throw  new java.awt.image.RasterFormatException ("data for adjacent scanlines overlaps");\r
-}}}}, "~B");\r
-Clazz.overrideMethod (c$, "toString", \r
-function () {\r
-return  String.instantialize ("BytePackedRaster: width = " + this.width + " height = " + this.height + " #channels " + this.numBands + " xOff = " + this.sampleModelTranslateX + " yOff = " + this.sampleModelTranslateY);\r
-});\r
-});\r
+Clazz.declarePackage ("jssun.awt.image");
+Clazz.load (["jssun.awt.image.SunWritableRaster"], "jssun.awt.image.BytePackedRaster", ["java.lang.ArrayIndexOutOfBoundsException", "java.awt.Point", "$.Rectangle", "java.awt.image.DataBufferByte", "$.MultiPixelPackedSampleModel", "$.RasterFormatException"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.dataBitOffset = 0;
+this.scanlineStride = 0;
+this.pixelBitStride = 0;
+this.bitMask = 0;
+this.data = null;
+this.shiftOffset = 0;
+this.type = 0;
+this.maxX = 0;
+this.maxY = 0;
+Clazz.instantialize (this, arguments);
+}, jssun.awt.image, "BytePackedRaster", jssun.awt.image.SunWritableRaster);
+Clazz.makeConstructor (c$, 
+function (sampleModel, origin) {
+this.construct (sampleModel, sampleModel.createDataBuffer (),  new java.awt.Rectangle (origin.x, origin.y, sampleModel.getWidth (), sampleModel.getHeight ()), origin, null);
+}, "java.awt.image.SampleModel,java.awt.Point");
+Clazz.makeConstructor (c$, 
+function (sampleModel, dataBuffer, origin) {
+this.construct (sampleModel, dataBuffer,  new java.awt.Rectangle (origin.x, origin.y, sampleModel.getWidth (), sampleModel.getHeight ()), origin, null);
+}, "java.awt.image.SampleModel,java.awt.image.DataBuffer,java.awt.Point");
+Clazz.makeConstructor (c$, 
+function (sampleModel, dataBuffer, aRegion, origin, parent) {
+Clazz.superConstructor (this, jssun.awt.image.BytePackedRaster, [sampleModel, dataBuffer, aRegion, origin, parent]);
+this.maxX = this.minX + this.width;
+this.maxY = this.minY + this.height;
+if (!(Clazz.instanceOf (dataBuffer, java.awt.image.DataBufferByte))) {
+throw  new java.awt.image.RasterFormatException ("BytePackedRasters must havebyte DataBuffers");
+}var dbb = dataBuffer;
+this.data = jssun.awt.image.SunWritableRaster.stealData (dbb, 0);
+if (dbb.getNumBanks () != 1) {
+throw  new java.awt.image.RasterFormatException ("DataBuffer for BytePackedRasters must only have 1 bank.");
+}var dbOffset = dbb.getOffset ();
+if (Clazz.instanceOf (sampleModel, java.awt.image.MultiPixelPackedSampleModel)) {
+var mppsm = sampleModel;
+this.pixelBitStride = mppsm.getPixelBitStride ();
+if (this.pixelBitStride != 1 && this.pixelBitStride != 2 && this.pixelBitStride != 4) {
+throw  new java.awt.image.RasterFormatException ("BytePackedRasters must have a bit depth of 1, 2, or 4");
+}this.scanlineStride = mppsm.getScanlineStride ();
+this.dataBitOffset = mppsm.getDataBitOffset () + dbOffset * 8;
+var xOffset = aRegion.x - origin.x;
+var yOffset = aRegion.y - origin.y;
+this.dataBitOffset += xOffset * this.pixelBitStride + yOffset * this.scanlineStride * 8;
+this.bitMask = (1 << this.pixelBitStride) - 1;
+this.shiftOffset = 8 - this.pixelBitStride;
+} else {
+throw  new java.awt.image.RasterFormatException ("BytePackedRasters must haveMultiPixelPackedSampleModel");
+}this.verify (false);
+}, "java.awt.image.SampleModel,java.awt.image.DataBuffer,java.awt.Rectangle,java.awt.Point,jssun.awt.image.BytePackedRaster");
+Clazz.defineMethod (c$, "getDataBitOffset", 
+function () {
+return this.dataBitOffset;
+});
+Clazz.defineMethod (c$, "getScanlineStride", 
+function () {
+return this.scanlineStride;
+});
+Clazz.defineMethod (c$, "getPixelBitStride", 
+function () {
+return this.pixelBitStride;
+});
+Clazz.defineMethod (c$, "getDataStorage", 
+function () {
+return this.data;
+});
+Clazz.defineMethod (c$, "getDataElements", 
+function (x, y, obj) {
+if ((x < this.minX) || (y < this.minY) || (x >= this.maxX) || (y >= this.maxY)) {
+throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
+}var outData;
+if (obj == null) {
+outData =  Clazz.newByteArray (this.numDataElements, 0);
+} else {
+outData = obj;
+}var bitnum = this.dataBitOffset + (x - this.minX) * this.pixelBitStride;
+var element = this.data[(y - this.minY) * this.scanlineStride + (bitnum >> 3)] & 0xff;
+var shift = this.shiftOffset - (bitnum & 7);
+outData[0] = ((element >> shift) & this.bitMask);
+return outData;
+}, "~N,~N,~O");
+Clazz.defineMethod (c$, "getDataElements", 
+function (x, y, w, h, outData) {
+return this.getByteData (x, y, w, h, outData);
+}, "~N,~N,~N,~N,~O");
+Clazz.defineMethod (c$, "getPixelData", 
+function (x, y, w, h, obj) {
+if ((x < this.minX) || (y < this.minY) || (x + w > this.maxX) || (y + h > this.maxY)) {
+throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
+}var outData;
+if (obj == null) {
+outData =  Clazz.newByteArray (this.numDataElements * w * h, 0);
+} else {
+outData = obj;
+}var pixbits = this.pixelBitStride;
+var scanbit = this.dataBitOffset + (x - this.minX) * pixbits;
+var index = (y - this.minY) * this.scanlineStride;
+var outindex = 0;
+var data = this.data;
+for (var j = 0; j < h; j++) {
+var bitnum = scanbit;
+for (var i = 0; i < w; i++) {
+var shift = this.shiftOffset - (bitnum & 7);
+outData[outindex++] = (this.bitMask & (data[index + (bitnum >> 3)] >> shift));
+bitnum += pixbits;
+}
+index += this.scanlineStride;
+}
+return outData;
+}, "~N,~N,~N,~N,~O");
+Clazz.defineMethod (c$, "getByteData", 
+function (x, y, w, h, band, outData) {
+return this.getByteData (x, y, w, h, outData);
+}, "~N,~N,~N,~N,~N,~A");
+Clazz.defineMethod (c$, "getByteData", 
+function (x, y, w, h, outData) {
+if ((x < this.minX) || (y < this.minY) || (x + w > this.maxX) || (y + h > this.maxY)) {
+throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
+}if (outData == null) {
+outData =  Clazz.newByteArray (w * h, 0);
+}var pixbits = this.pixelBitStride;
+var scanbit = this.dataBitOffset + (x - this.minX) * pixbits;
+var index = (y - this.minY) * this.scanlineStride;
+var outindex = 0;
+var data = this.data;
+for (var j = 0; j < h; j++) {
+var bitnum = scanbit;
+var element;
+var i = 0;
+while ((i < w) && ((bitnum & 7) != 0)) {
+var shift = this.shiftOffset - (bitnum & 7);
+outData[outindex++] = (this.bitMask & (data[index + (bitnum >> 3)] >> shift));
+bitnum += pixbits;
+i++;
+}
+var inIndex = index + (bitnum >> 3);
+switch (pixbits) {
+case 1:
+for (; i < w - 7; i += 8) {
+element = data[inIndex++];
+outData[outindex++] = ((element >> 7) & 1);
+outData[outindex++] = ((element >> 6) & 1);
+outData[outindex++] = ((element >> 5) & 1);
+outData[outindex++] = ((element >> 4) & 1);
+outData[outindex++] = ((element >> 3) & 1);
+outData[outindex++] = ((element >> 2) & 1);
+outData[outindex++] = ((element >> 1) & 1);
+outData[outindex++] = (element & 1);
+bitnum += 8;
+}
+break;
+case 2:
+for (; i < w - 7; i += 8) {
+element = data[inIndex++];
+outData[outindex++] = ((element >> 6) & 3);
+outData[outindex++] = ((element >> 4) & 3);
+outData[outindex++] = ((element >> 2) & 3);
+outData[outindex++] = (element & 3);
+element = data[inIndex++];
+outData[outindex++] = ((element >> 6) & 3);
+outData[outindex++] = ((element >> 4) & 3);
+outData[outindex++] = ((element >> 2) & 3);
+outData[outindex++] = (element & 3);
+bitnum += 16;
+}
+break;
+case 4:
+for (; i < w - 7; i += 8) {
+element = data[inIndex++];
+outData[outindex++] = ((element >> 4) & 0xf);
+outData[outindex++] = (element & 0xf);
+element = data[inIndex++];
+outData[outindex++] = ((element >> 4) & 0xf);
+outData[outindex++] = (element & 0xf);
+element = data[inIndex++];
+outData[outindex++] = ((element >> 4) & 0xf);
+outData[outindex++] = (element & 0xf);
+element = data[inIndex++];
+outData[outindex++] = ((element >> 4) & 0xf);
+outData[outindex++] = (element & 0xf);
+bitnum += 32;
+}
+break;
+}
+for (; i < w; i++) {
+var shift = this.shiftOffset - (bitnum & 7);
+outData[outindex++] = (this.bitMask & (data[index + (bitnum >> 3)] >> shift));
+bitnum += pixbits;
+}
+index += this.scanlineStride;
+}
+return outData;
+}, "~N,~N,~N,~N,~A");
+Clazz.defineMethod (c$, "setDataElements", 
+function (x, y, obj) {
+if ((x < this.minX) || (y < this.minY) || (x >= this.maxX) || (y >= this.maxY)) {
+throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
+}var inData = obj;
+var bitnum = this.dataBitOffset + (x - this.minX) * this.pixelBitStride;
+var index = (y - this.minY) * this.scanlineStride + (bitnum >> 3);
+var shift = this.shiftOffset - (bitnum & 7);
+var element = this.data[index];
+element &= ~(this.bitMask << shift);
+element |= (inData[0] & this.bitMask) << shift;
+this.data[index] = element;
+this.markDirty ();
+}, "~N,~N,~O");
+Clazz.defineMethod (c$, "setDataElements", 
+function (x, y, inRaster) {
+if (!(Clazz.instanceOf (inRaster, jssun.awt.image.BytePackedRaster)) || (inRaster).pixelBitStride != this.pixelBitStride) {
+Clazz.superCall (this, jssun.awt.image.BytePackedRaster, "setDataElements", [x, y, inRaster]);
+return;
+}var srcOffX = inRaster.getMinX ();
+var srcOffY = inRaster.getMinY ();
+var dstOffX = srcOffX + x;
+var dstOffY = srcOffY + y;
+var width = inRaster.getWidth ();
+var height = inRaster.getHeight ();
+if ((dstOffX < this.minX) || (dstOffY < this.minY) || (dstOffX + width > this.maxX) || (dstOffY + height > this.maxY)) {
+throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
+}this.setDataElements (dstOffX, dstOffY, srcOffX, srcOffY, width, height, inRaster);
+}, "~N,~N,java.awt.image.Raster");
+Clazz.defineMethod (c$, "setDataElements", 
+ function (dstX, dstY, srcX, srcY, width, height, inRaster) {
+if (width <= 0 || height <= 0) {
+return;
+}var inData = inRaster.data;
+var outData = this.data;
+var inscan = inRaster.scanlineStride;
+var outscan = this.scanlineStride;
+var inbit = inRaster.dataBitOffset + 8 * (srcY - inRaster.minY) * inscan + (srcX - inRaster.minX) * inRaster.pixelBitStride;
+var outbit = (this.dataBitOffset + 8 * (dstY - this.minY) * outscan + (dstX - this.minX) * this.pixelBitStride);
+var copybits = width * this.pixelBitStride;
+if ((inbit & 7) == (outbit & 7)) {
+var bitpos = outbit & 7;
+if (bitpos != 0) {
+var bits = 8 - bitpos;
+var inbyte = inbit >> 3;
+var outbyte = outbit >> 3;
+var mask = 0xff >> bitpos;
+if (copybits < bits) {
+mask &= 0xff << (bits - copybits);
+bits = copybits;
+}for (var j = 0; j < height; j++) {
+var element = outData[outbyte];
+element &= ~mask;
+element |= (inData[inbyte] & mask);
+outData[outbyte] = element;
+inbyte += inscan;
+outbyte += outscan;
+}
+inbit += bits;
+outbit += bits;
+copybits -= bits;
+}if (copybits >= 8) {
+var inbyte = inbit >> 3;
+var outbyte = outbit >> 3;
+var copybytes = copybits >> 3;
+if (copybytes == inscan && inscan == outscan) {
+System.arraycopy (inData, inbyte, outData, outbyte, inscan * height);
+} else {
+for (var j = 0; j < height; j++) {
+System.arraycopy (inData, inbyte, outData, outbyte, copybytes);
+inbyte += inscan;
+outbyte += outscan;
+}
+}var bits = copybytes * 8;
+inbit += bits;
+outbit += bits;
+copybits -= bits;
+}if (copybits > 0) {
+var inbyte = inbit >> 3;
+var outbyte = outbit >> 3;
+var mask = (0xff00 >> copybits) & 0xff;
+for (var j = 0; j < height; j++) {
+var element = outData[outbyte];
+element &= ~mask;
+element |= (inData[inbyte] & mask);
+outData[outbyte] = element;
+inbyte += inscan;
+outbyte += outscan;
+}
+}} else {
+var bitpos = outbit & 7;
+if (bitpos != 0 || copybits < 8) {
+var bits = 8 - bitpos;
+var inbyte = inbit >> 3;
+var outbyte = outbit >> 3;
+var lshift = inbit & 7;
+var rshift = 8 - lshift;
+var mask = 0xff >> bitpos;
+if (copybits < bits) {
+mask &= 0xff << (bits - copybits);
+bits = copybits;
+}var lastByte = inData.length - 1;
+for (var j = 0; j < height; j++) {
+var inData0 = inData[inbyte];
+var inData1 = 0;
+if (inbyte < lastByte) {
+inData1 = inData[inbyte + 1];
+}var element = outData[outbyte];
+element &= ~mask;
+element |= (((inData0 << lshift) | ((inData1 & 0xff) >> rshift)) >> bitpos) & mask;
+outData[outbyte] = element;
+inbyte += inscan;
+outbyte += outscan;
+}
+inbit += bits;
+outbit += bits;
+copybits -= bits;
+}if (copybits >= 8) {
+var inbyte = inbit >> 3;
+var outbyte = outbit >> 3;
+var copybytes = copybits >> 3;
+var lshift = inbit & 7;
+var rshift = 8 - lshift;
+for (var j = 0; j < height; j++) {
+var ibyte = inbyte + j * inscan;
+var obyte = outbyte + j * outscan;
+var inData0 = inData[ibyte];
+for (var i = 0; i < copybytes; i++) {
+var inData1 = inData[ibyte + 1];
+var val = (inData0 << lshift) | ((inData1 & 0xff) >> rshift);
+outData[obyte] = val;
+inData0 = inData1;
+++ibyte;
+++obyte;
+}
+}
+var bits = copybytes * 8;
+inbit += bits;
+outbit += bits;
+copybits -= bits;
+}if (copybits > 0) {
+var inbyte = inbit >> 3;
+var outbyte = outbit >> 3;
+var mask = (0xff00 >> copybits) & 0xff;
+var lshift = inbit & 7;
+var rshift = 8 - lshift;
+var lastByte = inData.length - 1;
+for (var j = 0; j < height; j++) {
+var inData0 = inData[inbyte];
+var inData1 = 0;
+if (inbyte < lastByte) {
+inData1 = inData[inbyte + 1];
+}var element = outData[outbyte];
+element &= ~mask;
+element |= ((inData0 << lshift) | ((inData1 & 0xff) >> rshift)) & mask;
+outData[outbyte] = element;
+inbyte += inscan;
+outbyte += outscan;
+}
+}}this.markDirty ();
+}, "~N,~N,~N,~N,~N,~N,jssun.awt.image.BytePackedRaster");
+Clazz.defineMethod (c$, "setRect", 
+function (dx, dy, srcRaster) {
+if (!(Clazz.instanceOf (srcRaster, jssun.awt.image.BytePackedRaster)) || (srcRaster).pixelBitStride != this.pixelBitStride) {
+Clazz.superCall (this, jssun.awt.image.BytePackedRaster, "setRect", [dx, dy, srcRaster]);
+return;
+}var width = srcRaster.getWidth ();
+var height = srcRaster.getHeight ();
+var srcOffX = srcRaster.getMinX ();
+var srcOffY = srcRaster.getMinY ();
+var dstOffX = dx + srcOffX;
+var dstOffY = dy + srcOffY;
+if (dstOffX < this.minX) {
+var skipX = this.minX - dstOffX;
+width -= skipX;
+srcOffX += skipX;
+dstOffX = this.minX;
+}if (dstOffY < this.minY) {
+var skipY = this.minY - dstOffY;
+height -= skipY;
+srcOffY += skipY;
+dstOffY = this.minY;
+}if (dstOffX + width > this.maxX) {
+width = this.maxX - dstOffX;
+}if (dstOffY + height > this.maxY) {
+height = this.maxY - dstOffY;
+}this.setDataElements (dstOffX, dstOffY, srcOffX, srcOffY, width, height, srcRaster);
+}, "~N,~N,java.awt.image.Raster");
+Clazz.defineMethod (c$, "setDataElements", 
+function (x, y, w, h, obj) {
+this.putByteData (x, y, w, h, obj);
+}, "~N,~N,~N,~N,~O");
+Clazz.defineMethod (c$, "putByteData", 
+function (x, y, w, h, band, inData) {
+this.putByteData (x, y, w, h, inData);
+}, "~N,~N,~N,~N,~N,~A");
+Clazz.defineMethod (c$, "putByteData", 
+function (x, y, w, h, inData) {
+if ((x < this.minX) || (y < this.minY) || (x + w > this.maxX) || (y + h > this.maxY)) {
+throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
+}if (w == 0 || h == 0) {
+return;
+}var pixbits = this.pixelBitStride;
+var scanbit = this.dataBitOffset + (x - this.minX) * pixbits;
+var index = (y - this.minY) * this.scanlineStride;
+var outindex = 0;
+var data = this.data;
+for (var j = 0; j < h; j++) {
+var bitnum = scanbit;
+var element;
+var i = 0;
+while ((i < w) && ((bitnum & 7) != 0)) {
+var shift = this.shiftOffset - (bitnum & 7);
+element = data[index + (bitnum >> 3)];
+element &= ~(this.bitMask << shift);
+element |= (inData[outindex++] & this.bitMask) << shift;
+data[index + (bitnum >> 3)] = element;
+bitnum += pixbits;
+i++;
+}
+var inIndex = index + (bitnum >> 3);
+switch (pixbits) {
+case 1:
+for (; i < w - 7; i += 8) {
+element = (inData[outindex++] & 1) << 7;
+element |= (inData[outindex++] & 1) << 6;
+element |= (inData[outindex++] & 1) << 5;
+element |= (inData[outindex++] & 1) << 4;
+element |= (inData[outindex++] & 1) << 3;
+element |= (inData[outindex++] & 1) << 2;
+element |= (inData[outindex++] & 1) << 1;
+element |= (inData[outindex++] & 1);
+data[inIndex++] = element;
+bitnum += 8;
+}
+break;
+case 2:
+for (; i < w - 7; i += 8) {
+element = (inData[outindex++] & 3) << 6;
+element |= (inData[outindex++] & 3) << 4;
+element |= (inData[outindex++] & 3) << 2;
+element |= (inData[outindex++] & 3);
+data[inIndex++] = element;
+element = (inData[outindex++] & 3) << 6;
+element |= (inData[outindex++] & 3) << 4;
+element |= (inData[outindex++] & 3) << 2;
+element |= (inData[outindex++] & 3);
+data[inIndex++] = element;
+bitnum += 16;
+}
+break;
+case 4:
+for (; i < w - 7; i += 8) {
+element = (inData[outindex++] & 0xf) << 4;
+element |= (inData[outindex++] & 0xf);
+data[inIndex++] = element;
+element = (inData[outindex++] & 0xf) << 4;
+element |= (inData[outindex++] & 0xf);
+data[inIndex++] = element;
+element = (inData[outindex++] & 0xf) << 4;
+element |= (inData[outindex++] & 0xf);
+data[inIndex++] = element;
+element = (inData[outindex++] & 0xf) << 4;
+element |= (inData[outindex++] & 0xf);
+data[inIndex++] = element;
+bitnum += 32;
+}
+break;
+}
+for (; i < w; i++) {
+var shift = this.shiftOffset - (bitnum & 7);
+element = data[index + (bitnum >> 3)];
+element &= ~(this.bitMask << shift);
+element |= (inData[outindex++] & this.bitMask) << shift;
+data[index + (bitnum >> 3)] = element;
+bitnum += pixbits;
+}
+index += this.scanlineStride;
+}
+this.markDirty ();
+}, "~N,~N,~N,~N,~A");
+Clazz.defineMethod (c$, "getPixels", 
+function (x, y, w, h, iArray) {
+if ((x < this.minX) || (y < this.minY) || (x + w > this.maxX) || (y + h > this.maxY)) {
+throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
+}if (iArray == null) {
+iArray =  Clazz.newIntArray (w * h, 0);
+}var pixbits = this.pixelBitStride;
+var scanbit = this.dataBitOffset + (x - this.minX) * pixbits;
+var index = (y - this.minY) * this.scanlineStride;
+var outindex = 0;
+var data = this.data;
+for (var j = 0; j < h; j++) {
+var bitnum = scanbit;
+var element;
+var i = 0;
+while ((i < w) && ((bitnum & 7) != 0)) {
+var shift = this.shiftOffset - (bitnum & 7);
+iArray[outindex++] = this.bitMask & (data[index + (bitnum >> 3)] >> shift);
+bitnum += pixbits;
+i++;
+}
+var inIndex = index + (bitnum >> 3);
+switch (pixbits) {
+case 1:
+for (; i < w - 7; i += 8) {
+element = data[inIndex++];
+iArray[outindex++] = (element >> 7) & 1;
+iArray[outindex++] = (element >> 6) & 1;
+iArray[outindex++] = (element >> 5) & 1;
+iArray[outindex++] = (element >> 4) & 1;
+iArray[outindex++] = (element >> 3) & 1;
+iArray[outindex++] = (element >> 2) & 1;
+iArray[outindex++] = (element >> 1) & 1;
+iArray[outindex++] = element & 1;
+bitnum += 8;
+}
+break;
+case 2:
+for (; i < w - 7; i += 8) {
+element = data[inIndex++];
+iArray[outindex++] = (element >> 6) & 3;
+iArray[outindex++] = (element >> 4) & 3;
+iArray[outindex++] = (element >> 2) & 3;
+iArray[outindex++] = element & 3;
+element = data[inIndex++];
+iArray[outindex++] = (element >> 6) & 3;
+iArray[outindex++] = (element >> 4) & 3;
+iArray[outindex++] = (element >> 2) & 3;
+iArray[outindex++] = element & 3;
+bitnum += 16;
+}
+break;
+case 4:
+for (; i < w - 7; i += 8) {
+element = data[inIndex++];
+iArray[outindex++] = (element >> 4) & 0xf;
+iArray[outindex++] = element & 0xf;
+element = data[inIndex++];
+iArray[outindex++] = (element >> 4) & 0xf;
+iArray[outindex++] = element & 0xf;
+element = data[inIndex++];
+iArray[outindex++] = (element >> 4) & 0xf;
+iArray[outindex++] = element & 0xf;
+element = data[inIndex++];
+iArray[outindex++] = (element >> 4) & 0xf;
+iArray[outindex++] = element & 0xf;
+bitnum += 32;
+}
+break;
+}
+for (; i < w; i++) {
+var shift = this.shiftOffset - (bitnum & 7);
+iArray[outindex++] = this.bitMask & (data[index + (bitnum >> 3)] >> shift);
+bitnum += pixbits;
+}
+index += this.scanlineStride;
+}
+return iArray;
+}, "~N,~N,~N,~N,~A");
+Clazz.defineMethod (c$, "setPixels", 
+function (x, y, w, h, iArray) {
+if ((x < this.minX) || (y < this.minY) || (x + w > this.maxX) || (y + h > this.maxY)) {
+throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
+}var pixbits = this.pixelBitStride;
+var scanbit = this.dataBitOffset + (x - this.minX) * pixbits;
+var index = (y - this.minY) * this.scanlineStride;
+var outindex = 0;
+var data = this.data;
+for (var j = 0; j < h; j++) {
+var bitnum = scanbit;
+var element;
+var i = 0;
+while ((i < w) && ((bitnum & 7) != 0)) {
+var shift = this.shiftOffset - (bitnum & 7);
+element = data[index + (bitnum >> 3)];
+element &= ~(this.bitMask << shift);
+element |= (iArray[outindex++] & this.bitMask) << shift;
+data[index + (bitnum >> 3)] = element;
+bitnum += pixbits;
+i++;
+}
+var inIndex = index + (bitnum >> 3);
+switch (pixbits) {
+case 1:
+for (; i < w - 7; i += 8) {
+element = (iArray[outindex++] & 1) << 7;
+element |= (iArray[outindex++] & 1) << 6;
+element |= (iArray[outindex++] & 1) << 5;
+element |= (iArray[outindex++] & 1) << 4;
+element |= (iArray[outindex++] & 1) << 3;
+element |= (iArray[outindex++] & 1) << 2;
+element |= (iArray[outindex++] & 1) << 1;
+element |= (iArray[outindex++] & 1);
+data[inIndex++] = element;
+bitnum += 8;
+}
+break;
+case 2:
+for (; i < w - 7; i += 8) {
+element = (iArray[outindex++] & 3) << 6;
+element |= (iArray[outindex++] & 3) << 4;
+element |= (iArray[outindex++] & 3) << 2;
+element |= (iArray[outindex++] & 3);
+data[inIndex++] = element;
+element = (iArray[outindex++] & 3) << 6;
+element |= (iArray[outindex++] & 3) << 4;
+element |= (iArray[outindex++] & 3) << 2;
+element |= (iArray[outindex++] & 3);
+data[inIndex++] = element;
+bitnum += 16;
+}
+break;
+case 4:
+for (; i < w - 7; i += 8) {
+element = (iArray[outindex++] & 0xf) << 4;
+element |= (iArray[outindex++] & 0xf);
+data[inIndex++] = element;
+element = (iArray[outindex++] & 0xf) << 4;
+element |= (iArray[outindex++] & 0xf);
+data[inIndex++] = element;
+element = (iArray[outindex++] & 0xf) << 4;
+element |= (iArray[outindex++] & 0xf);
+data[inIndex++] = element;
+element = (iArray[outindex++] & 0xf) << 4;
+element |= (iArray[outindex++] & 0xf);
+data[inIndex++] = element;
+bitnum += 32;
+}
+break;
+}
+for (; i < w; i++) {
+var shift = this.shiftOffset - (bitnum & 7);
+element = data[index + (bitnum >> 3)];
+element &= ~(this.bitMask << shift);
+element |= (iArray[outindex++] & this.bitMask) << shift;
+data[index + (bitnum >> 3)] = element;
+bitnum += pixbits;
+}
+index += this.scanlineStride;
+}
+this.markDirty ();
+}, "~N,~N,~N,~N,~A");
+Clazz.overrideMethod (c$, "createChild", 
+function (x, y, width, height, x0, y0, bandList) {
+var newRaster = this.createWritableChild (x, y, width, height, x0, y0, bandList);
+return newRaster;
+}, "~N,~N,~N,~N,~N,~N,~A");
+Clazz.overrideMethod (c$, "createWritableChild", 
+function (x, y, width, height, x0, y0, bandList) {
+if (x < this.minX) {
+throw  new java.awt.image.RasterFormatException ("x lies outside the raster");
+}if (y < this.minY) {
+throw  new java.awt.image.RasterFormatException ("y lies outside the raster");
+}if ((x + width < x) || (x + width > this.minX + this.width)) {
+throw  new java.awt.image.RasterFormatException ("(x + width) is outside of Raster");
+}if ((y + height < y) || (y + height > this.minY + this.height)) {
+throw  new java.awt.image.RasterFormatException ("(y + height) is outside of Raster");
+}var sm;
+if (bandList != null) {
+sm = this.sampleModel.createSubsetSampleModel (bandList);
+} else {
+sm = this.sampleModel;
+}var deltaX = x0 - x;
+var deltaY = y0 - y;
+return  new jssun.awt.image.BytePackedRaster (sm, this.dataBuffer,  new java.awt.Rectangle (x0, y0, width, height),  new java.awt.Point (this.sampleModelTranslateX + deltaX, this.sampleModelTranslateY + deltaY), this);
+}, "~N,~N,~N,~N,~N,~N,~A");
+Clazz.defineMethod (c$, "createCompatibleWritableRaster", 
+function (w, h) {
+if (w <= 0 || h <= 0) {
+throw  new java.awt.image.RasterFormatException ("negative " + ((w <= 0) ? "width" : "height"));
+}var sm = this.sampleModel.createCompatibleSampleModel (w, h);
+return  new jssun.awt.image.BytePackedRaster (sm,  new java.awt.Point (0, 0));
+}, "~N,~N");
+Clazz.defineMethod (c$, "createCompatibleWritableRaster", 
+function () {
+return this.createCompatibleWritableRaster (this.width, this.height);
+});
+Clazz.defineMethod (c$, "verify", 
+ function (strictCheck) {
+if (this.dataBitOffset < 0) {
+throw  new java.awt.image.RasterFormatException ("Data offsets must be >= 0");
+}if (this.width <= 0 || this.height <= 0 || this.height > (Clazz.doubleToInt (2147483647 / this.width))) {
+throw  new java.awt.image.RasterFormatException ("Invalid raster dimension");
+}if ((this.width - 1) > Clazz.doubleToInt (2147483647 / this.pixelBitStride)) {
+throw  new java.awt.image.RasterFormatException ("Invalid raster dimension");
+}if (this.minX - this.sampleModelTranslateX < 0 || this.minY - this.sampleModelTranslateY < 0) {
+throw  new java.awt.image.RasterFormatException ("Incorrect origin/translate: (" + this.minX + ", " + this.minY + ") / (" + this.sampleModelTranslateX + ", " + this.sampleModelTranslateY + ")");
+}if (this.scanlineStride < 0 || this.scanlineStride > (Clazz.doubleToInt (2147483647 / this.height))) {
+throw  new java.awt.image.RasterFormatException ("Invalid scanline stride");
+}if (this.height > 1 || this.minY - this.sampleModelTranslateY > 0) {
+if (this.scanlineStride > this.data.length) {
+throw  new java.awt.image.RasterFormatException ("Incorrect scanline stride: " + this.scanlineStride);
+}}var lastbit = this.dataBitOffset + (this.height - 1) * this.scanlineStride * 8 + (this.width - 1) * this.pixelBitStride + this.pixelBitStride - 1;
+if (lastbit < 0 || Clazz.doubleToInt (lastbit / 8) >= this.data.length) {
+throw  new java.awt.image.RasterFormatException ("raster dimensions overflow array bounds");
+}if (strictCheck) {
+if (this.height > 1) {
+lastbit = this.width * this.pixelBitStride - 1;
+if (Clazz.doubleToInt (lastbit / 8) >= this.scanlineStride) {
+throw  new java.awt.image.RasterFormatException ("data for adjacent scanlines overlaps");
+}}}}, "~B");
+Clazz.overrideMethod (c$, "toString", 
+function () {
+return  String.instantialize ("BytePackedRaster: width = " + this.width + " height = " + this.height + " #channels " + this.numBands + " xOff = " + this.sampleModelTranslateX + " yOff = " + this.sampleModelTranslateY);
+});
+});