JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / java / awt / image / SinglePixelPackedSampleModel.js
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
7 this.maxBitSize = 0;\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
16 }}, "~N,~N,~N,~A");\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
29 var bitOffset = 0;\r
30 var bitSize = 0;\r
31 var mask;\r
32 mask = bitMasks[i];\r
33 if (mask != 0) {\r
34 while ((mask & 1) == 0) {\r
35 mask = mask >>> 1;\r
36 bitOffset++;\r
37 }\r
38 while ((mask & 1) == 1) {\r
39 mask = mask >>> 1;\r
40 bitSize++;\r
41 }\r
42 if (mask != 0) {\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
48 }}\r
49 }, "~N,~N,~N,~N,~A");\r
50 Clazz.overrideMethod (c$, "getNumDataElements", \r
51 function () {\r
52 return 1;\r
53 });\r
54 Clazz.defineMethod (c$, "getBufferSize", \r
55  function () {\r
56 var size = this.scanlineStride * (this.height - 1) + this.width;\r
57 return size;\r
58 });\r
59 Clazz.overrideMethod (c$, "createCompatibleSampleModel", \r
60 function (w, h) {\r
61 var sampleModel =  new java.awt.image.SinglePixelPackedSampleModel (this.dataType, w, h, this.bitMasks);\r
62 return sampleModel;\r
63 }, "~N,~N");\r
64 Clazz.overrideMethod (c$, "createDataBuffer", \r
65 function () {\r
66 var dataBuffer = null;\r
67 var size = this.getBufferSize ();\r
68 switch (this.dataType) {\r
69 case 0:\r
70 dataBuffer =  new java.awt.image.DataBufferByte (size);\r
71 break;\r
72 case 3:\r
73 dataBuffer =  new java.awt.image.DataBufferInt (size);\r
74 break;\r
75 }\r
76 return dataBuffer;\r
77 });\r
78 Clazz.defineMethod (c$, "getSampleSize", \r
79 function () {\r
80 var mask;\r
81 var sampleSize =  Clazz.newIntArray (this.numBands, 0);\r
82 for (var i = 0; i < this.numBands; i++) {\r
83 sampleSize[i] = 0;\r
84 mask = this.bitMasks[i] >>> this.bitOffsets[i];\r
85 while ((mask & 1) != 0) {\r
86 sampleSize[i]++;\r
87 mask = mask >>> 1;\r
88 }\r
89 }\r
90 return sampleSize;\r
91 });\r
92 Clazz.defineMethod (c$, "getSampleSize", \r
93 function (band) {\r
94 var sampleSize = 0;\r
95 var mask = this.bitMasks[band] >>> this.bitOffsets[band];\r
96 while ((mask & 1) != 0) {\r
97 sampleSize++;\r
98 mask = mask >>> 1;\r
99 }\r
100 return sampleSize;\r
101 }, "~N");\r
102 Clazz.defineMethod (c$, "getOffset", \r
103 function (x, y) {\r
104 var offset = y * this.scanlineStride + x;\r
105 return offset;\r
106 }, "~N,~N");\r
107 Clazz.defineMethod (c$, "getBitOffsets", \r
108 function () {\r
109 return this.bitOffsets.clone ();\r
110 });\r
111 Clazz.defineMethod (c$, "getBitMasks", \r
112 function () {\r
113 return this.bitMasks.clone ();\r
114 });\r
115 Clazz.defineMethod (c$, "getScanlineStride", \r
116 function () {\r
117 return this.scanlineStride;\r
118 });\r
119 Clazz.overrideMethod (c$, "createSubsetSampleModel", \r
120 function (bands) {\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
124 \r
125 return  new java.awt.image.SinglePixelPackedSampleModel (this.dataType, this.width, this.height, this.scanlineStride, newBitMasks);\r
126 }, "~A");\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
132 switch (type) {\r
133 case 0:\r
134 var bdata;\r
135 if (obj == null) bdata =  Clazz.newByteArray (1, 0);\r
136  else bdata = obj;\r
137 bdata[0] = data.getElem (y * this.scanlineStride + x);\r
138 obj = bdata;\r
139 break;\r
140 case 3:\r
141 var idata;\r
142 if (obj == null) idata =  Clazz.newIntArray (1, 0);\r
143  else idata = obj;\r
144 idata[0] = data.getElem (y * this.scanlineStride + x);\r
145 obj = idata;\r
146 break;\r
147 }\r
148 return obj;\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
154 }var pixels;\r
155 if (iArray == null) {\r
156 pixels =  Clazz.newIntArray (this.numBands, 0);\r
157 } else {\r
158 pixels = iArray;\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
162 }\r
163 return pixels;\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
169 }var pixels;\r
170 if (iArray != null) {\r
171 pixels = iArray;\r
172 } else {\r
173 pixels =  Clazz.newIntArray (w * h * this.numBands, 0);\r
174 }var lineOffset = y * this.scanlineStride + x;\r
175 var dstOffset = 0;\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
181 }\r
182 }\r
183 lineOffset += this.scanlineStride;\r
184 }\r
185 return pixels;\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
198 }var samples;\r
199 if (iArray != null) {\r
200 samples = iArray;\r
201 } else {\r
202 samples =  Clazz.newIntArray (w * h, 0);\r
203 }var lineOffset = y * this.scanlineStride + x;\r
204 var dstOffset = 0;\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
209 }\r
210 lineOffset += this.scanlineStride;\r
211 }\r
212 return samples;\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
219 switch (type) {\r
220 case 0:\r
221 var barray = obj;\r
222 data.setElem (y * this.scanlineStride + x, (barray[0]) & 0xff);\r
223 break;\r
224 case 3:\r
225 var iarray = obj;\r
226 data.setElem (y * this.scanlineStride + x, iarray[0]);\r
227 break;\r
228 }\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
239 }\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
247 var srcOffset = 0;\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
255 }\r
256 data.setElem (lineOffset + j, value);\r
257 }\r
258 lineOffset += this.scanlineStride;\r
259 }\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
275 var srcOffset = 0;\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
283 }\r
284 lineOffset += this.scanlineStride;\r
285 }\r
286 }, "~N,~N,~N,~N,~N,~A,java.awt.image.DataBuffer");\r
287 Clazz.overrideMethod (c$, "equals", \r
288 function (o) {\r
289 if ((o == null) || !(Clazz.instanceOf (o, java.awt.image.SinglePixelPackedSampleModel))) {\r
290 return false;\r
291 }var that = o;\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
293 }, "~O");\r
294 Clazz.overrideMethod (c$, "hashCode", \r
295 function () {\r
296 var hash = 0;\r
297 hash = this.width;\r
298 hash <<= 8;\r
299 hash ^= this.height;\r
300 hash <<= 8;\r
301 hash ^= this.numBands;\r
302 hash <<= 8;\r
303 hash ^= this.dataType;\r
304 hash <<= 8;\r
305 for (var i = 0; i < this.bitMasks.length; i++) {\r
306 hash ^= this.bitMasks[i];\r
307 hash <<= 8;\r
308 }\r
309 for (var i = 0; i < this.bitOffsets.length; i++) {\r
310 hash ^= this.bitOffsets[i];\r
311 hash <<= 8;\r
312 }\r
313 for (var i = 0; i < this.bitSizes.length; i++) {\r
314 hash ^= this.bitSizes[i];\r
315 hash <<= 8;\r
316 }\r
317 hash ^= this.maxBitSize;\r
318 hash <<= 8;\r
319 hash ^= this.scanlineStride;\r
320 return hash;\r
321 });\r
322 });\r