e37a7575ebbac2999006c834a88272c9e01133e6
[jalviewjs.git] / site / j2s / jssun / awt / image / ByteComponentRaster.js
1 Clazz.declarePackage ("jssun.awt.image");\r
2 Clazz.load (["jssun.awt.image.SunWritableRaster"], "jssun.awt.image.ByteComponentRaster", ["java.lang.ArrayIndexOutOfBoundsException", "java.awt.Point", "$.Rectangle", "java.awt.image.DataBufferByte", "$.RasterFormatException", "$.SinglePixelPackedSampleModel"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.bandOffset = 0;\r
5 this.dataOffsets = null;\r
6 this.scanlineStride = 0;\r
7 this.pixelStride = 0;\r
8 this.data = null;\r
9 this.type = 0;\r
10 this.maxX = 0;\r
11 this.maxY = 0;\r
12 Clazz.instantialize (this, arguments);\r
13 }, jssun.awt.image, "ByteComponentRaster", jssun.awt.image.SunWritableRaster);\r
14 Clazz.makeConstructor (c$, \r
15 function () {\r
16 Clazz.superConstructor (this, jssun.awt.image.ByteComponentRaster, []);\r
17 });\r
18 Clazz.makeConstructor (c$, \r
19 function (sampleModel, origin) {\r
20 Clazz.superConstructor (this, jssun.awt.image.ByteComponentRaster, []);\r
21 this.setByteCompRaster (sampleModel, sampleModel.createDataBuffer (),  new java.awt.Rectangle (origin.x, origin.y, sampleModel.getWidth (), sampleModel.getHeight ()), origin, null);\r
22 }, "java.awt.image.SampleModel,java.awt.Point");\r
23 Clazz.makeConstructor (c$, \r
24 function (sampleModel, dataBuffer, origin) {\r
25 Clazz.superConstructor (this, jssun.awt.image.ByteComponentRaster, []);\r
26 this.setByteCompRaster (sampleModel, dataBuffer,  new java.awt.Rectangle (origin.x, origin.y, sampleModel.getWidth (), sampleModel.getHeight ()), origin, null);\r
27 }, "java.awt.image.SampleModel,java.awt.image.DataBuffer,java.awt.Point");\r
28 Clazz.makeConstructor (c$, \r
29 function (sampleModel, dataBuffer, aRegion, origin, parent) {\r
30 Clazz.superConstructor (this, jssun.awt.image.ByteComponentRaster, []);\r
31 this.setByteCompRaster (sampleModel, dataBuffer, aRegion, origin, parent);\r
32 }, "java.awt.image.SampleModel,java.awt.image.DataBuffer,java.awt.Rectangle,java.awt.Point,jssun.awt.image.ByteComponentRaster");\r
33 Clazz.defineMethod (c$, "setByteCompRaster", \r
34 function (sampleModel, dataBuffer, aRegion, origin, parent) {\r
35 this.setSunRaster (sampleModel, dataBuffer, aRegion, origin, parent);\r
36 this.maxX = this.minX + this.width;\r
37 this.maxY = this.minY + this.height;\r
38 if (!(Clazz.instanceOf (dataBuffer, java.awt.image.DataBufferByte))) {\r
39 throw  new java.awt.image.RasterFormatException ("ByteComponentRasters must have byte DataBuffers");\r
40 }var dbb = dataBuffer;\r
41 this.data = jssun.awt.image.SunWritableRaster.stealData (dbb, 0);\r
42 if (dbb.getNumBanks () != 1) {\r
43 throw  new java.awt.image.RasterFormatException ("DataBuffer for ByteComponentRasters must only have 1 bank.");\r
44 }var dbOffset = dbb.getOffset ();\r
45 if (Clazz.instanceOf (sampleModel, java.awt.image.SinglePixelPackedSampleModel)) {\r
46 var sppsm = sampleModel;\r
47 this.scanlineStride = sppsm.getScanlineStride ();\r
48 this.pixelStride = 1;\r
49 this.dataOffsets =  Clazz.newIntArray (1, 0);\r
50 this.dataOffsets[0] = dbOffset;\r
51 var xOffset = aRegion.x - origin.x;\r
52 var yOffset = aRegion.y - origin.y;\r
53 this.dataOffsets[0] += xOffset * this.pixelStride + yOffset * this.scanlineStride;\r
54 } else {\r
55 throw  new java.awt.image.RasterFormatException ("IntegerComponentRasters must have ComponentSampleModel or SinglePixelPackedSampleModel");\r
56 }this.bandOffset = this.dataOffsets[0];\r
57 this.verify ();\r
58 }, "java.awt.image.SampleModel,java.awt.image.DataBuffer,java.awt.Rectangle,java.awt.Point,jssun.awt.image.ByteComponentRaster");\r
59 Clazz.defineMethod (c$, "getDataOffsets", \r
60 function () {\r
61 return this.dataOffsets.clone ();\r
62 });\r
63 Clazz.defineMethod (c$, "getDataOffset", \r
64 function (band) {\r
65 return this.dataOffsets[band];\r
66 }, "~N");\r
67 Clazz.defineMethod (c$, "getScanlineStride", \r
68 function () {\r
69 return this.scanlineStride;\r
70 });\r
71 Clazz.defineMethod (c$, "getPixelStride", \r
72 function () {\r
73 return this.pixelStride;\r
74 });\r
75 Clazz.defineMethod (c$, "getDataStorage", \r
76 function () {\r
77 return this.data;\r
78 });\r
79 Clazz.defineMethod (c$, "getDataElements", \r
80 function (x, y, obj) {\r
81 if ((x < this.minX) || (y < this.minY) || (x >= this.maxX) || (y >= this.maxY)) {\r
82 throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");\r
83 }var outData;\r
84 if (obj == null) {\r
85 outData =  Clazz.newByteArray (this.numDataElements, 0);\r
86 } else {\r
87 outData = obj;\r
88 }var off = (y - this.minY) * this.scanlineStride + (x - this.minX) * this.pixelStride;\r
89 for (var band = 0; band < this.numDataElements; band++) {\r
90 outData[band] = this.data[this.dataOffsets[band] + off];\r
91 }\r
92 return outData;\r
93 }, "~N,~N,~O");\r
94 Clazz.defineMethod (c$, "getDataElements", \r
95 function (x, y, w, h, obj) {\r
96 if ((x < this.minX) || (y < this.minY) || (x + w > this.maxX) || (y + h > this.maxY)) {\r
97 throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");\r
98 }var outData;\r
99 if (obj == null) {\r
100 outData =  Clazz.newByteArray (w * h * this.numDataElements, 0);\r
101 } else {\r
102 outData = obj;\r
103 }var yoff = (y - this.minY) * this.scanlineStride + (x - this.minX) * this.pixelStride;\r
104 var xoff;\r
105 var off = 0;\r
106 var xstart;\r
107 var ystart;\r
108 for (ystart = 0; ystart < h; ystart++, yoff += this.scanlineStride) {\r
109 xoff = yoff;\r
110 for (xstart = 0; xstart < w; xstart++, xoff += this.pixelStride) {\r
111 for (var c = 0; c < this.numDataElements; c++) {\r
112 outData[off++] = this.data[this.dataOffsets[c] + xoff];\r
113 }\r
114 }\r
115 }\r
116 return outData;\r
117 }, "~N,~N,~N,~N,~O");\r
118 Clazz.defineMethod (c$, "getByteData", \r
119 function (x, y, w, h, band, outData) {\r
120 if ((x < this.minX) || (y < this.minY) || (x + w > this.maxX) || (y + h > this.maxY)) {\r
121 throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");\r
122 }if (outData == null) {\r
123 outData =  Clazz.newByteArray (this.scanlineStride * h, 0);\r
124 }var yoff = (y - this.minY) * this.scanlineStride + (x - this.minX) * this.pixelStride + this.dataOffsets[band];\r
125 var xoff;\r
126 var off = 0;\r
127 var xstart;\r
128 var ystart;\r
129 if (this.pixelStride == 1) {\r
130 if (this.scanlineStride == w) {\r
131 System.arraycopy (this.data, yoff, outData, 0, w * h);\r
132 } else {\r
133 for (ystart = 0; ystart < h; ystart++, yoff += this.scanlineStride) {\r
134 System.arraycopy (this.data, yoff, outData, off, w);\r
135 off += w;\r
136 }\r
137 }} else {\r
138 for (ystart = 0; ystart < h; ystart++, yoff += this.scanlineStride) {\r
139 xoff = yoff;\r
140 for (xstart = 0; xstart < w; xstart++, xoff += this.pixelStride) {\r
141 outData[off++] = this.data[xoff];\r
142 }\r
143 }\r
144 }return outData;\r
145 }, "~N,~N,~N,~N,~N,~A");\r
146 Clazz.defineMethod (c$, "getByteData", \r
147 function (x, y, w, h, outData) {\r
148 if ((x < this.minX) || (y < this.minY) || (x + w > this.maxX) || (y + h > this.maxY)) {\r
149 throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");\r
150 }if (outData == null) {\r
151 outData =  Clazz.newByteArray (this.numDataElements * this.scanlineStride * h, 0);\r
152 }var yoff = (y - this.minY) * this.scanlineStride + (x - this.minX) * this.pixelStride;\r
153 var xoff;\r
154 var off = 0;\r
155 var xstart;\r
156 var ystart;\r
157 for (ystart = 0; ystart < h; ystart++, yoff += this.scanlineStride) {\r
158 xoff = yoff;\r
159 for (xstart = 0; xstart < w; xstart++, xoff += this.pixelStride) {\r
160 for (var c = 0; c < this.numDataElements; c++) {\r
161 outData[off++] = this.data[this.dataOffsets[c] + xoff];\r
162 }\r
163 }\r
164 }\r
165 return outData;\r
166 }, "~N,~N,~N,~N,~A");\r
167 Clazz.defineMethod (c$, "setDataElements", \r
168 function (x, y, obj) {\r
169 if ((x < this.minX) || (y < this.minY) || (x >= this.maxX) || (y >= this.maxY)) {\r
170 throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");\r
171 }var inData = obj;\r
172 var off = (y - this.minY) * this.scanlineStride + (x - this.minX) * this.pixelStride;\r
173 for (var i = 0; i < this.numDataElements; i++) {\r
174 this.data[this.dataOffsets[i] + off] = inData[i];\r
175 }\r
176 this.markDirty ();\r
177 }, "~N,~N,~O");\r
178 Clazz.defineMethod (c$, "setDataElements", \r
179 function (x, y, inRaster) {\r
180 var dstOffX = inRaster.getMinX () + x;\r
181 var dstOffY = inRaster.getMinY () + y;\r
182 var width = inRaster.getWidth ();\r
183 var height = inRaster.getHeight ();\r
184 if ((dstOffX < this.minX) || (dstOffY < this.minY) || (dstOffX + width > this.maxX) || (dstOffY + height > this.maxY)) {\r
185 throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");\r
186 }this.setDataElements (dstOffX, dstOffY, width, height, inRaster);\r
187 }, "~N,~N,java.awt.image.Raster");\r
188 Clazz.defineMethod (c$, "setDataElements", \r
189  function (dstX, dstY, width, height, inRaster) {\r
190 if (width <= 0 || height <= 0) {\r
191 return;\r
192 }var srcOffX = inRaster.getMinX ();\r
193 var srcOffY = inRaster.getMinY ();\r
194 var tdata = null;\r
195 if (Clazz.instanceOf (inRaster, jssun.awt.image.ByteComponentRaster)) {\r
196 var bct = inRaster;\r
197 var bdata = bct.getDataStorage ();\r
198 if (this.numDataElements == 1) {\r
199 var toff = bct.getDataOffset (0);\r
200 var tss = bct.getScanlineStride ();\r
201 var srcOffset = toff;\r
202 var dstOffset = this.dataOffsets[0] + (dstY - this.minY) * this.scanlineStride + (dstX - this.minX);\r
203 if (this.pixelStride == bct.getPixelStride ()) {\r
204 width *= this.pixelStride;\r
205 for (var tmpY = 0; tmpY < height; tmpY++) {\r
206 System.arraycopy (bdata, srcOffset, this.data, dstOffset, width);\r
207 srcOffset += tss;\r
208 dstOffset += this.scanlineStride;\r
209 }\r
210 this.markDirty ();\r
211 return;\r
212 }}}for (var startY = 0; startY < height; startY++) {\r
213 tdata = inRaster.getDataElements (srcOffX, srcOffY + startY, width, 1, tdata);\r
214 this.setDataElements (dstX, dstY + startY, width, 1, tdata);\r
215 }\r
216 }, "~N,~N,~N,~N,java.awt.image.Raster");\r
217 Clazz.defineMethod (c$, "setDataElements", \r
218 function (x, y, w, h, obj) {\r
219 if ((x < this.minX) || (y < this.minY) || (x + w > this.maxX) || (y + h > this.maxY)) {\r
220 throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");\r
221 }var inData = obj;\r
222 var yoff = (y - this.minY) * this.scanlineStride + (x - this.minX) * this.pixelStride;\r
223 var xoff;\r
224 var off = 0;\r
225 var xstart;\r
226 var ystart;\r
227 if (this.numDataElements == 1) {\r
228 var srcOffset = 0;\r
229 var dstOffset = yoff + this.dataOffsets[0];\r
230 for (ystart = 0; ystart < h; ystart++) {\r
231 xoff = yoff;\r
232 System.arraycopy (inData, srcOffset, this.data, dstOffset, w);\r
233 srcOffset += w;\r
234 dstOffset += this.scanlineStride;\r
235 }\r
236 this.markDirty ();\r
237 return;\r
238 }for (ystart = 0; ystart < h; ystart++, yoff += this.scanlineStride) {\r
239 xoff = yoff;\r
240 for (xstart = 0; xstart < w; xstart++, xoff += this.pixelStride) {\r
241 for (var c = 0; c < this.numDataElements; c++) {\r
242 this.data[this.dataOffsets[c] + xoff] = inData[off++];\r
243 }\r
244 }\r
245 }\r
246 this.markDirty ();\r
247 }, "~N,~N,~N,~N,~O");\r
248 Clazz.defineMethod (c$, "putByteData", \r
249 function (x, y, w, h, band, inData) {\r
250 if ((x < this.minX) || (y < this.minY) || (x + w > this.maxX) || (y + h > this.maxY)) {\r
251 throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");\r
252 }var yoff = (y - this.minY) * this.scanlineStride + (x - this.minX) * this.pixelStride + this.dataOffsets[band];\r
253 var xoff;\r
254 var off = 0;\r
255 var xstart;\r
256 var ystart;\r
257 if (this.pixelStride == 1) {\r
258 if (this.scanlineStride == w) {\r
259 System.arraycopy (inData, 0, this.data, yoff, w * h);\r
260 } else {\r
261 for (ystart = 0; ystart < h; ystart++, yoff += this.scanlineStride) {\r
262 System.arraycopy (inData, off, this.data, yoff, w);\r
263 off += w;\r
264 }\r
265 }} else {\r
266 for (ystart = 0; ystart < h; ystart++, yoff += this.scanlineStride) {\r
267 xoff = yoff;\r
268 for (xstart = 0; xstart < w; xstart++, xoff += this.pixelStride) {\r
269 this.data[xoff] = inData[off++];\r
270 }\r
271 }\r
272 }this.markDirty ();\r
273 }, "~N,~N,~N,~N,~N,~A");\r
274 Clazz.defineMethod (c$, "putByteData", \r
275 function (x, y, w, h, inData) {\r
276 if ((x < this.minX) || (y < this.minY) || (x + w > this.maxX) || (y + h > this.maxY)) {\r
277 throw  new ArrayIndexOutOfBoundsException ("Coordinate out of bounds!");\r
278 }var yoff = (y - this.minY) * this.scanlineStride + (x - this.minX) * this.pixelStride;\r
279 var xoff;\r
280 var off = 0;\r
281 var xstart;\r
282 var ystart;\r
283 if (this.numDataElements == 1) {\r
284 yoff += this.dataOffsets[0];\r
285 if (this.pixelStride == 1) {\r
286 if (this.scanlineStride == w) {\r
287 System.arraycopy (inData, 0, this.data, yoff, w * h);\r
288 } else {\r
289 for (ystart = 0; ystart < h; ystart++) {\r
290 System.arraycopy (inData, off, this.data, yoff, w);\r
291 off += w;\r
292 yoff += this.scanlineStride;\r
293 }\r
294 }} else {\r
295 for (ystart = 0; ystart < h; ystart++, yoff += this.scanlineStride) {\r
296 xoff = yoff;\r
297 for (xstart = 0; xstart < w; xstart++, xoff += this.pixelStride) {\r
298 this.data[xoff] = inData[off++];\r
299 }\r
300 }\r
301 }} else {\r
302 for (ystart = 0; ystart < h; ystart++, yoff += this.scanlineStride) {\r
303 xoff = yoff;\r
304 for (xstart = 0; xstart < w; xstart++, xoff += this.pixelStride) {\r
305 for (var c = 0; c < this.numDataElements; c++) {\r
306 this.data[this.dataOffsets[c] + xoff] = inData[off++];\r
307 }\r
308 }\r
309 }\r
310 }this.markDirty ();\r
311 }, "~N,~N,~N,~N,~A");\r
312 Clazz.overrideMethod (c$, "createChild", \r
313 function (x, y, width, height, x0, y0, bandList) {\r
314 var newRaster = this.createWritableChild (x, y, width, height, x0, y0, bandList);\r
315 return newRaster;\r
316 }, "~N,~N,~N,~N,~N,~N,~A");\r
317 Clazz.overrideMethod (c$, "createWritableChild", \r
318 function (x, y, width, height, x0, y0, bandList) {\r
319 if (x < this.minX) {\r
320 throw  new java.awt.image.RasterFormatException ("x lies outside the raster");\r
321 }if (y < this.minY) {\r
322 throw  new java.awt.image.RasterFormatException ("y lies outside the raster");\r
323 }if ((x + width < x) || (x + width > this.minX + this.width)) {\r
324 throw  new java.awt.image.RasterFormatException ("(x + width) is outside of Raster");\r
325 }if ((y + height < y) || (y + height > this.minY + this.height)) {\r
326 throw  new java.awt.image.RasterFormatException ("(y + height) is outside of Raster");\r
327 }var sm;\r
328 if (bandList != null) sm = this.sampleModel.createSubsetSampleModel (bandList);\r
329  else sm = this.sampleModel;\r
330 var deltaX = x0 - x;\r
331 var deltaY = y0 - y;\r
332 return  new jssun.awt.image.ByteComponentRaster (sm, this.dataBuffer,  new java.awt.Rectangle (x0, y0, width, height),  new java.awt.Point (this.sampleModelTranslateX + deltaX, this.sampleModelTranslateY + deltaY), this);\r
333 }, "~N,~N,~N,~N,~N,~N,~A");\r
334 Clazz.defineMethod (c$, "createCompatibleWritableRaster", \r
335 function (w, h) {\r
336 if (w <= 0 || h <= 0) {\r
337 throw  new java.awt.image.RasterFormatException ("negative " + ((w <= 0) ? "width" : "height"));\r
338 }var sm = this.sampleModel.createCompatibleSampleModel (w, h);\r
339 return  new jssun.awt.image.ByteComponentRaster (sm,  new java.awt.Point (0, 0));\r
340 }, "~N,~N");\r
341 Clazz.defineMethod (c$, "createCompatibleWritableRaster", \r
342 function () {\r
343 return this.createCompatibleWritableRaster (this.width, this.height);\r
344 });\r
345 Clazz.defineMethod (c$, "verify", \r
346 function () {\r
347 if (this.width <= 0 || this.height <= 0 || this.height > (Clazz.doubleToInt (2147483647 / this.width))) {\r
348 throw  new java.awt.image.RasterFormatException ("Invalid raster dimension");\r
349 }for (var i = 0; i < this.dataOffsets.length; i++) {\r
350 if (this.dataOffsets[i] < 0) {\r
351 throw  new java.awt.image.RasterFormatException ("Data offsets for band " + i + "(" + this.dataOffsets[i] + ") must be >= 0");\r
352 }}\r
353 if (this.minX - this.sampleModelTranslateX < 0 || this.minY - this.sampleModelTranslateY < 0) {\r
354 throw  new java.awt.image.RasterFormatException ("Incorrect origin/translate: (" + this.minX + ", " + this.minY + ") / (" + this.sampleModelTranslateX + ", " + this.sampleModelTranslateY + ")");\r
355 }if (this.scanlineStride < 0 || this.scanlineStride > (Clazz.doubleToInt (2147483647 / this.height))) {\r
356 throw  new java.awt.image.RasterFormatException ("Incorrect scanline stride: " + this.scanlineStride);\r
357 }if (this.height > 1 || this.minY - this.sampleModelTranslateY > 0) {\r
358 if (this.scanlineStride > this.data.length) {\r
359 throw  new java.awt.image.RasterFormatException ("Incorrect scanline stride: " + this.scanlineStride);\r
360 }}var lastScanOffset = (this.height - 1) * this.scanlineStride;\r
361 if (this.pixelStride < 0 || this.pixelStride > (Clazz.doubleToInt (2147483647 / this.width)) || this.pixelStride > this.data.length) {\r
362 throw  new java.awt.image.RasterFormatException ("Incorrect pixel stride: " + this.pixelStride);\r
363 }var lastPixelOffset = (this.width - 1) * this.pixelStride;\r
364 if (lastPixelOffset > (2147483647 - lastScanOffset)) {\r
365 throw  new java.awt.image.RasterFormatException ("Incorrect raster attributes");\r
366 }lastPixelOffset += lastScanOffset;\r
367 var index;\r
368 var maxIndex = 0;\r
369 for (var i = 0; i < this.numDataElements; i++) {\r
370 if (this.dataOffsets[i] > (2147483647 - lastPixelOffset)) {\r
371 throw  new java.awt.image.RasterFormatException ("Incorrect band offset: " + this.dataOffsets[i]);\r
372 }index = lastPixelOffset + this.dataOffsets[i];\r
373 if (index > maxIndex) {\r
374 maxIndex = index;\r
375 }}\r
376 if (this.data.length <= maxIndex) {\r
377 throw  new java.awt.image.RasterFormatException ("Data array too small (should be > " + maxIndex + " )");\r
378 }});\r
379 Clazz.overrideMethod (c$, "toString", \r
380 function () {\r
381 return  String.instantialize ("ByteComponentRaster: width = " + this.width + " height = " + this.height + " #numDataElements " + this.numDataElements + " dataOff[0] = " + this.dataOffsets[0]);\r
382 });\r
383 });\r