1 Clazz.declarePackage ("java.awt.image");
\r
2 Clazz.load (["java.awt.image.SampleModel"], "java.awt.image.SinglePixelPackedSampleModel", ["java.lang.ArrayIndexOutOfBoundsException", "$.IllegalArgumentException", "java.util.Arrays", "java.awt.image.DataBufferByte", "$.DataBufferInt", "$.RasterFormatException"], function () {
\r
3 c$ = Clazz.decorateAsClass (function () {
\r
4 this.bitMasks = null;
\r
5 this.bitOffsets = null;
\r
6 this.bitSizes = null;
\r
8 this.scanlineStride = 0;
\r
9 Clazz.instantialize (this, arguments);
\r
10 }, java.awt.image, "SinglePixelPackedSampleModel", java.awt.image.SampleModel);
\r
11 Clazz.makeConstructor (c$,
\r
12 function (dataType, w, h, bitMasks) {
\r
13 this.construct (dataType, w, h, w, bitMasks);
\r
14 if (dataType != 0 && dataType != 3) {
\r
15 throw new IllegalArgumentException ("Unsupported data type " + dataType);
\r
17 Clazz.makeConstructor (c$,
\r
18 function (dataType, w, h, scanlineStride, bitMasks) {
\r
19 Clazz.superConstructor (this, java.awt.image.SinglePixelPackedSampleModel, [dataType, w, h, bitMasks.length]);
\r
20 if (dataType != 0 && dataType != 3) {
\r
21 throw new IllegalArgumentException ("Unsupported data type " + dataType);
\r
22 }this.dataType = dataType;
\r
23 this.bitMasks = bitMasks.clone ();
\r
24 this.scanlineStride = scanlineStride;
\r
25 this.bitOffsets = Clazz.newIntArray (this.numBands, 0);
\r
26 this.bitSizes = Clazz.newIntArray (this.numBands, 0);
\r
27 this.maxBitSize = 0;
\r
28 for (var i = 0; i < this.numBands; i++) {
\r
34 while ((mask & 1) == 0) {
\r
38 while ((mask & 1) == 1) {
\r
43 throw new IllegalArgumentException ("Mask " + bitMasks[i] + " must be contiguous");
\r
44 }}this.bitOffsets[i] = bitOffset;
\r
45 this.bitSizes[i] = bitSize;
\r
46 if (bitSize > this.maxBitSize) {
\r
47 this.maxBitSize = bitSize;
\r
49 }, "~N,~N,~N,~N,~A");
\r
50 Clazz.overrideMethod (c$, "getNumDataElements",
\r
54 Clazz.defineMethod (c$, "getBufferSize",
\r
56 var size = this.scanlineStride * (this.height - 1) + this.width;
\r
59 Clazz.overrideMethod (c$, "createCompatibleSampleModel",
\r
61 var sampleModel = new java.awt.image.SinglePixelPackedSampleModel (this.dataType, w, h, this.bitMasks);
\r
64 Clazz.overrideMethod (c$, "createDataBuffer",
\r
66 var dataBuffer = null;
\r
67 var size = this.getBufferSize ();
\r
68 switch (this.dataType) {
\r
70 dataBuffer = new java.awt.image.DataBufferByte (size);
\r
73 dataBuffer = new java.awt.image.DataBufferInt (size);
\r
78 Clazz.defineMethod (c$, "getSampleSize",
\r
81 var sampleSize = Clazz.newIntArray (this.numBands, 0);
\r
82 for (var i = 0; i < this.numBands; i++) {
\r
84 mask = this.bitMasks[i] >>> this.bitOffsets[i];
\r
85 while ((mask & 1) != 0) {
\r
92 Clazz.defineMethod (c$, "getSampleSize",
\r
95 var mask = this.bitMasks[band] >>> this.bitOffsets[band];
\r
96 while ((mask & 1) != 0) {
\r
102 Clazz.defineMethod (c$, "getOffset",
\r
104 var offset = y * this.scanlineStride + x;
\r
107 Clazz.defineMethod (c$, "getBitOffsets",
\r
109 return this.bitOffsets.clone ();
\r
111 Clazz.defineMethod (c$, "getBitMasks",
\r
113 return this.bitMasks.clone ();
\r
115 Clazz.defineMethod (c$, "getScanlineStride",
\r
117 return this.scanlineStride;
\r
119 Clazz.overrideMethod (c$, "createSubsetSampleModel",
\r
121 if (bands.length > this.numBands) throw new java.awt.image.RasterFormatException ("There are only " + this.numBands + " bands");
\r
122 var newBitMasks = Clazz.newIntArray (bands.length, 0);
\r
123 for (var i = 0; i < bands.length; i++) newBitMasks[i] = this.bitMasks[bands[i]];
\r
125 return new java.awt.image.SinglePixelPackedSampleModel (this.dataType, this.width, this.height, this.scanlineStride, newBitMasks);
\r
127 Clazz.defineMethod (c$, "getDataElements",
\r
128 function (x, y, obj, data) {
\r
129 if ((x < 0) || (y < 0) || (x >= this.width) || (y >= this.height)) {
\r
130 throw new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
\r
131 }var type = this.getTransferType ();
\r
135 if (obj == null) bdata = Clazz.newByteArray (1, 0);
\r
137 bdata[0] = data.getElem (y * this.scanlineStride + x);
\r
142 if (obj == null) idata = Clazz.newIntArray (1, 0);
\r
144 idata[0] = data.getElem (y * this.scanlineStride + x);
\r
149 }, "~N,~N,~O,java.awt.image.DataBuffer");
\r
150 Clazz.defineMethod (c$, "getPixel",
\r
151 function (x, y, iArray, data) {
\r
152 if ((x < 0) || (y < 0) || (x >= this.width) || (y >= this.height)) {
\r
153 throw new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
\r
155 if (iArray == null) {
\r
156 pixels = Clazz.newIntArray (this.numBands, 0);
\r
159 }var value = data.getElem (y * this.scanlineStride + x);
\r
160 for (var i = 0; i < this.numBands; i++) {
\r
161 pixels[i] = (value & this.bitMasks[i]) >>> this.bitOffsets[i];
\r
164 }, "~N,~N,~A,java.awt.image.DataBuffer");
\r
165 Clazz.defineMethod (c$, "getPixels",
\r
166 function (x, y, w, h, iArray, data) {
\r
167 if ((x < 0) || (y < 0) || (x + w > this.width) || (y + h > this.height)) {
\r
168 throw new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
\r
170 if (iArray != null) {
\r
173 pixels = Clazz.newIntArray (w * h * this.numBands, 0);
\r
174 }var lineOffset = y * this.scanlineStride + x;
\r
176 for (var i = 0; i < h; i++) {
\r
177 for (var j = 0; j < w; j++) {
\r
178 var value = data.getElem (lineOffset + j);
\r
179 for (var k = 0; k < this.numBands; k++) {
\r
180 pixels[dstOffset++] = ((value & this.bitMasks[k]) >>> this.bitOffsets[k]);
\r
183 lineOffset += this.scanlineStride;
\r
186 }, "~N,~N,~N,~N,~A,java.awt.image.DataBuffer");
\r
187 Clazz.overrideMethod (c$, "getSample",
\r
188 function (x, y, b, data) {
\r
189 if ((x < 0) || (y < 0) || (x >= this.width) || (y >= this.height)) {
\r
190 throw new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
\r
191 }var sample = data.getElem (y * this.scanlineStride + x);
\r
192 return ((sample & this.bitMasks[b]) >>> this.bitOffsets[b]);
\r
193 }, "~N,~N,~N,java.awt.image.DataBuffer");
\r
194 Clazz.defineMethod (c$, "getSamples",
\r
195 function (x, y, w, h, b, iArray, data) {
\r
196 if ((x < 0) || (y < 0) || (x + w > this.width) || (y + h > this.height)) {
\r
197 throw new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
\r
199 if (iArray != null) {
\r
202 samples = Clazz.newIntArray (w * h, 0);
\r
203 }var lineOffset = y * this.scanlineStride + x;
\r
205 for (var i = 0; i < h; i++) {
\r
206 for (var j = 0; j < w; j++) {
\r
207 var value = data.getElem (lineOffset + j);
\r
208 samples[dstOffset++] = ((value & this.bitMasks[b]) >>> this.bitOffsets[b]);
\r
210 lineOffset += this.scanlineStride;
\r
213 }, "~N,~N,~N,~N,~N,~A,java.awt.image.DataBuffer");
\r
214 Clazz.defineMethod (c$, "setDataElements",
\r
215 function (x, y, obj, data) {
\r
216 if ((x < 0) || (y < 0) || (x >= this.width) || (y >= this.height)) {
\r
217 throw new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
\r
218 }var type = this.getTransferType ();
\r
222 data.setElem (y * this.scanlineStride + x, (barray[0]) & 0xff);
\r
226 data.setElem (y * this.scanlineStride + x, iarray[0]);
\r
229 }, "~N,~N,~O,java.awt.image.DataBuffer");
\r
230 Clazz.defineMethod (c$, "setPixel",
\r
231 function (x, y, iArray, data) {
\r
232 if ((x < 0) || (y < 0) || (x >= this.width) || (y >= this.height)) {
\r
233 throw new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
\r
234 }var lineOffset = y * this.scanlineStride + x;
\r
235 var value = data.getElem (lineOffset);
\r
236 for (var i = 0; i < this.numBands; i++) {
\r
237 value &= ~this.bitMasks[i];
\r
238 value |= ((iArray[i] << this.bitOffsets[i]) & this.bitMasks[i]);
\r
240 data.setElem (lineOffset, value);
\r
241 }, "~N,~N,~A,java.awt.image.DataBuffer");
\r
242 Clazz.defineMethod (c$, "setPixels",
\r
243 function (x, y, w, h, iArray, data) {
\r
244 if ((x < 0) || (y < 0) || (x + w > this.width) || (y + h > this.height)) {
\r
245 throw new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
\r
246 }var lineOffset = y * this.scanlineStride + x;
\r
248 for (var i = 0; i < h; i++) {
\r
249 for (var j = 0; j < w; j++) {
\r
250 var value = data.getElem (lineOffset + j);
\r
251 for (var k = 0; k < this.numBands; k++) {
\r
252 value &= ~this.bitMasks[k];
\r
253 var srcValue = iArray[srcOffset++];
\r
254 value |= ((srcValue << this.bitOffsets[k]) & this.bitMasks[k]);
\r
256 data.setElem (lineOffset + j, value);
\r
258 lineOffset += this.scanlineStride;
\r
260 }, "~N,~N,~N,~N,~A,java.awt.image.DataBuffer");
\r
261 Clazz.defineMethod (c$, "setSample",
\r
262 function (x, y, b, s, data) {
\r
263 if ((x < 0) || (y < 0) || (x >= this.width) || (y >= this.height)) {
\r
264 throw new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
\r
265 }var value = data.getElem (y * this.scanlineStride + x);
\r
266 value &= ~this.bitMasks[b];
\r
267 value |= (s << this.bitOffsets[b]) & this.bitMasks[b];
\r
268 data.setElem (y * this.scanlineStride + x, value);
\r
269 }, "~N,~N,~N,~N,java.awt.image.DataBuffer");
\r
270 Clazz.defineMethod (c$, "setSamples",
\r
271 function (x, y, w, h, b, iArray, data) {
\r
272 if ((x < 0) || (y < 0) || (x + w > this.width) || (y + h > this.height)) {
\r
273 throw new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");
\r
274 }var lineOffset = y * this.scanlineStride + x;
\r
276 for (var i = 0; i < h; i++) {
\r
277 for (var j = 0; j < w; j++) {
\r
278 var value = data.getElem (lineOffset + j);
\r
279 value &= ~this.bitMasks[b];
\r
280 var sample = iArray[srcOffset++];
\r
281 value |= (sample << this.bitOffsets[b]) & this.bitMasks[b];
\r
282 data.setElem (lineOffset + j, value);
\r
284 lineOffset += this.scanlineStride;
\r
286 }, "~N,~N,~N,~N,~N,~A,java.awt.image.DataBuffer");
\r
287 Clazz.overrideMethod (c$, "equals",
\r
289 if ((o == null) || !(Clazz.instanceOf (o, java.awt.image.SinglePixelPackedSampleModel))) {
\r
292 return this.width == that.width && this.height == that.height && this.numBands == that.numBands && this.dataType == that.dataType && java.util.Arrays.equals (this.bitMasks, that.bitMasks) && java.util.Arrays.equals (this.bitOffsets, that.bitOffsets) && java.util.Arrays.equals (this.bitSizes, that.bitSizes) && this.maxBitSize == that.maxBitSize && this.scanlineStride == that.scanlineStride;
\r
294 Clazz.overrideMethod (c$, "hashCode",
\r
299 hash ^= this.height;
\r
301 hash ^= this.numBands;
\r
303 hash ^= this.dataType;
\r
305 for (var i = 0; i < this.bitMasks.length; i++) {
\r
306 hash ^= this.bitMasks[i];
\r
309 for (var i = 0; i < this.bitOffsets.length; i++) {
\r
310 hash ^= this.bitOffsets[i];
\r
313 for (var i = 0; i < this.bitSizes.length; i++) {
\r
314 hash ^= this.bitSizes[i];
\r
317 hash ^= this.maxBitSize;
\r
319 hash ^= this.scanlineStride;
\r