JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / java / awt / image / DirectColorModel.js
1 Clazz.declarePackage ("java.awt.image");\r
2 Clazz.load (["java.awt.image.PackedColorModel"], "java.awt.image.DirectColorModel", ["java.lang.ClassCastException", "$.IllegalArgumentException", "$.UnsupportedOperationException", "java.awt.color.ColorSpace", "java.awt.image.ColorModel", "$.Raster"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.red_mask = 0;\r
5 this.green_mask = 0;\r
6 this.blue_mask = 0;\r
7 this.alpha_mask = 0;\r
8 this.is_LinearRGB = false;\r
9 this.lRGBprecision = 0;\r
10 this.tosRGB8LUT = null;\r
11 this.fromsRGB8LUT8 = null;\r
12 this.fromsRGB8LUT16 = null;\r
13 Clazz.instantialize (this, arguments);\r
14 }, java.awt.image, "DirectColorModel", java.awt.image.PackedColorModel);\r
15 Clazz.makeConstructor (c$, \r
16 function (bits, rmask, gmask, bmask) {\r
17 this.construct (bits, rmask, gmask, bmask, 0);\r
18 }, "~N,~N,~N,~N");\r
19 Clazz.makeConstructor (c$, \r
20 function (bits, rmask, gmask, bmask, amask) {\r
21 Clazz.superConstructor (this, java.awt.image.DirectColorModel, [java.awt.color.ColorSpace.getInstance (1000), bits, rmask, gmask, bmask, amask, false, amask == 0 ? 1 : 3, java.awt.image.ColorModel.getDefaultTransferType (bits)]);\r
22 }, "~N,~N,~N,~N,~N");\r
23 Clazz.makeConstructor (c$, \r
24 function (space, bits, rmask, gmask, bmask, amask, isAlphaPremultiplied, transferType) {\r
25 Clazz.superConstructor (this, java.awt.image.DirectColorModel, [space, bits, rmask, gmask, bmask, amask, isAlphaPremultiplied, amask == 0 ? 1 : 3, transferType]);\r
26 }, "java.awt.color.ColorSpace,~N,~N,~N,~N,~N,~B,~N");\r
27 Clazz.defineMethod (c$, "getRedMask", \r
28 function () {\r
29 return this.maskArray[0];\r
30 });\r
31 Clazz.defineMethod (c$, "getGreenMask", \r
32 function () {\r
33 return this.maskArray[1];\r
34 });\r
35 Clazz.defineMethod (c$, "getBlueMask", \r
36 function () {\r
37 return this.maskArray[2];\r
38 });\r
39 Clazz.defineMethod (c$, "getAlphaMask", \r
40 function () {\r
41 if (this.supportsAlpha) {\r
42 return this.maskArray[3];\r
43 } else {\r
44 return 0;\r
45 }});\r
46 Clazz.defineMethod (c$, "getDefaultRGBComponents", \r
47  function (pixel) {\r
48 var components = this.getComponents (pixel, null, 0);\r
49 var norm = this.getNormalizedComponents (components, 0, null, 0);\r
50 return this.colorSpace.toRGB (norm);\r
51 }, "~N");\r
52 Clazz.defineMethod (c$, "getsRGBComponentFromsRGB", \r
53  function (pixel, idx) {\r
54 var c = ((pixel & this.maskArray[idx]) >>> this.maskOffsets[idx]);\r
55 if (this.$isAlphaPremultiplied) {\r
56 var a = ((pixel & this.maskArray[3]) >>> this.maskOffsets[3]);\r
57 c = (a == 0) ? 0 : Clazz.floatToInt (((c * this.scaleFactors[idx]) * 255.0 / (a * this.scaleFactors[3])) + 0.5);\r
58 } else if (this.scaleFactors[idx] != 1.0) {\r
59 c = Clazz.floatToInt ((c * this.scaleFactors[idx]) + 0.5);\r
60 }return c;\r
61 }, "~N,~N");\r
62 Clazz.defineMethod (c$, "getsRGBComponentFromLinearRGB", \r
63  function (pixel, idx) {\r
64 var c = ((pixel & this.maskArray[idx]) >>> this.maskOffsets[idx]);\r
65 if (this.$isAlphaPremultiplied) {\r
66 var factor = ((1 << this.lRGBprecision) - 1);\r
67 var a = ((pixel & this.maskArray[3]) >>> this.maskOffsets[3]);\r
68 c = (a == 0) ? 0 : Clazz.floatToInt (((c * this.scaleFactors[idx]) * factor / (a * this.scaleFactors[3])) + 0.5);\r
69 } else if (this.nBits[idx] != this.lRGBprecision) {\r
70 if (this.lRGBprecision == 16) {\r
71 c = Clazz.floatToInt ((c * this.scaleFactors[idx] * 257.0) + 0.5);\r
72 } else {\r
73 c = Clazz.floatToInt ((c * this.scaleFactors[idx]) + 0.5);\r
74 }}return this.tosRGB8LUT[c] & 0xff;\r
75 }, "~N,~N");\r
76 Clazz.defineMethod (c$, "getRed", \r
77 function (pixel) {\r
78 if (this.is_sRGB) {\r
79 return this.getsRGBComponentFromsRGB (pixel, 0);\r
80 } else if (this.is_LinearRGB) {\r
81 return this.getsRGBComponentFromLinearRGB (pixel, 0);\r
82 }var rgb = this.getDefaultRGBComponents (pixel);\r
83 return Clazz.floatToInt (rgb[0] * 255.0 + 0.5);\r
84 }, "~N");\r
85 Clazz.defineMethod (c$, "getGreen", \r
86 function (pixel) {\r
87 if (this.is_sRGB) {\r
88 return this.getsRGBComponentFromsRGB (pixel, 1);\r
89 } else if (this.is_LinearRGB) {\r
90 return this.getsRGBComponentFromLinearRGB (pixel, 1);\r
91 }var rgb = this.getDefaultRGBComponents (pixel);\r
92 return Clazz.floatToInt (rgb[1] * 255.0 + 0.5);\r
93 }, "~N");\r
94 Clazz.defineMethod (c$, "getBlue", \r
95 function (pixel) {\r
96 if (this.is_sRGB) {\r
97 return this.getsRGBComponentFromsRGB (pixel, 2);\r
98 } else if (this.is_LinearRGB) {\r
99 return this.getsRGBComponentFromLinearRGB (pixel, 2);\r
100 }var rgb = this.getDefaultRGBComponents (pixel);\r
101 return Clazz.floatToInt (rgb[2] * 255.0 + 0.5);\r
102 }, "~N");\r
103 Clazz.defineMethod (c$, "getAlpha", \r
104 function (pixel) {\r
105 if (!this.supportsAlpha) return 255;\r
106 var a = ((pixel & this.maskArray[3]) >>> this.maskOffsets[3]);\r
107 if (this.scaleFactors[3] != 1.0) {\r
108 a = Clazz.floatToInt (a * this.scaleFactors[3] + 0.5);\r
109 }return a;\r
110 }, "~N");\r
111 Clazz.defineMethod (c$, "getRGB", \r
112 function (pixel) {\r
113 if (this.is_sRGB || this.is_LinearRGB) {\r
114 return (this.getAlpha (pixel) << 24) | (this.getRed (pixel) << 16) | (this.getGreen (pixel) << 8) | (this.getBlue (pixel) << 0);\r
115 }var rgb = this.getDefaultRGBComponents (pixel);\r
116 return (this.getAlpha (pixel) << 24) | ((Clazz.floatToInt (rgb[0] * 255.0 + 0.5)) << 16) | ((Clazz.floatToInt (rgb[1] * 255.0 + 0.5)) << 8) | ((Clazz.floatToInt (rgb[2] * 255.0 + 0.5)) << 0);\r
117 }, "~N");\r
118 Clazz.defineMethod (c$, "getRed", \r
119 function (inData) {\r
120 var pixel = 0;\r
121 switch (this.transferType) {\r
122 case 0:\r
123 var bdata = inData;\r
124 pixel = bdata[0] & 0xff;\r
125 break;\r
126 case 3:\r
127 var idata = inData;\r
128 pixel = idata[0];\r
129 break;\r
130 default:\r
131 throw  new UnsupportedOperationException ("This method has not been " + "implemented for transferType " + this.transferType);\r
132 }\r
133 return this.getRed (pixel);\r
134 }, "~O");\r
135 Clazz.defineMethod (c$, "getGreen", \r
136 function (inData) {\r
137 var pixel = 0;\r
138 switch (this.transferType) {\r
139 case 0:\r
140 var bdata = inData;\r
141 pixel = bdata[0] & 0xff;\r
142 break;\r
143 case 3:\r
144 var idata = inData;\r
145 pixel = idata[0];\r
146 break;\r
147 default:\r
148 throw  new UnsupportedOperationException ("This method has not been " + "implemented for transferType " + this.transferType);\r
149 }\r
150 return this.getGreen (pixel);\r
151 }, "~O");\r
152 Clazz.defineMethod (c$, "getBlue", \r
153 function (inData) {\r
154 var pixel = 0;\r
155 switch (this.transferType) {\r
156 case 0:\r
157 var bdata = inData;\r
158 pixel = bdata[0] & 0xff;\r
159 break;\r
160 case 3:\r
161 var idata = inData;\r
162 pixel = idata[0];\r
163 break;\r
164 default:\r
165 throw  new UnsupportedOperationException ("This method has not been " + "implemented for transferType " + this.transferType);\r
166 }\r
167 return this.getBlue (pixel);\r
168 }, "~O");\r
169 Clazz.defineMethod (c$, "getAlpha", \r
170 function (inData) {\r
171 var pixel = 0;\r
172 switch (this.transferType) {\r
173 case 0:\r
174 var bdata = inData;\r
175 pixel = bdata[0] & 0xff;\r
176 break;\r
177 case 3:\r
178 var idata = inData;\r
179 pixel = idata[0];\r
180 break;\r
181 default:\r
182 throw  new UnsupportedOperationException ("This method has not been " + "implemented for transferType " + this.transferType);\r
183 }\r
184 return this.getAlpha (pixel);\r
185 }, "~O");\r
186 Clazz.defineMethod (c$, "getRGB", \r
187 function (inData) {\r
188 var pixel = 0;\r
189 switch (this.transferType) {\r
190 case 0:\r
191 var bdata = inData;\r
192 pixel = bdata[0] & 0xff;\r
193 break;\r
194 case 3:\r
195 var idata = inData;\r
196 pixel = idata[0];\r
197 break;\r
198 default:\r
199 throw  new UnsupportedOperationException ("This method has not been " + "implemented for transferType " + this.transferType);\r
200 }\r
201 return this.getRGB (pixel);\r
202 }, "~O");\r
203 Clazz.defineMethod (c$, "getDataElements", \r
204 function (rgb, pixel) {\r
205 var intpixel = null;\r
206 if (this.transferType == 3 && pixel != null) {\r
207 intpixel = pixel;\r
208 intpixel[0] = 0;\r
209 } else {\r
210 intpixel =  Clazz.newIntArray (1, 0);\r
211 }var defaultCM = java.awt.image.ColorModel.getRGBdefault ();\r
212 if (this === defaultCM || this.equals (defaultCM)) {\r
213 intpixel[0] = rgb;\r
214 return intpixel;\r
215 }var red;\r
216 var grn;\r
217 var blu;\r
218 var alp;\r
219 red = (rgb >> 16) & 0xff;\r
220 grn = (rgb >> 8) & 0xff;\r
221 blu = rgb & 0xff;\r
222 if (this.is_sRGB || this.is_LinearRGB) {\r
223 var precision;\r
224 var factor;\r
225 if (this.is_LinearRGB) {\r
226 if (this.lRGBprecision == 8) {\r
227 red = this.fromsRGB8LUT8[red] & 0xff;\r
228 grn = this.fromsRGB8LUT8[grn] & 0xff;\r
229 blu = this.fromsRGB8LUT8[blu] & 0xff;\r
230 precision = 8;\r
231 factor = 0.003921569;\r
232 } else {\r
233 red = this.fromsRGB8LUT16[red] & 0xffff;\r
234 grn = this.fromsRGB8LUT16[grn] & 0xffff;\r
235 blu = this.fromsRGB8LUT16[blu] & 0xffff;\r
236 precision = 16;\r
237 factor = 1.5259022E-5;\r
238 }} else {\r
239 precision = 8;\r
240 factor = 0.003921569;\r
241 }if (this.supportsAlpha) {\r
242 alp = (rgb >> 24) & 0xff;\r
243 if (this.$isAlphaPremultiplied) {\r
244 factor *= (alp * (0.003921569));\r
245 precision = -1;\r
246 }if (this.nBits[3] != 8) {\r
247 alp = Clazz.floatToInt ((alp * (0.003921569) * ((1 << this.nBits[3]) - 1)) + 0.5);\r
248 if (alp > ((1 << this.nBits[3]) - 1)) {\r
249 alp = (1 << this.nBits[3]) - 1;\r
250 }}intpixel[0] = alp << this.maskOffsets[3];\r
251 }if (this.nBits[0] != precision) {\r
252 red = Clazz.floatToInt ((red * factor * ((1 << this.nBits[0]) - 1)) + 0.5);\r
253 }if (this.nBits[1] != precision) {\r
254 grn = Clazz.floatToInt ((grn * factor * ((1 << this.nBits[1]) - 1)) + 0.5);\r
255 }if (this.nBits[2] != precision) {\r
256 blu = Clazz.floatToInt ((blu * factor * ((1 << this.nBits[2]) - 1)) + 0.5);\r
257 }} else {\r
258 var norm =  Clazz.newFloatArray (3, 0);\r
259 var factor = 0.003921569;\r
260 norm[0] = red * factor;\r
261 norm[1] = grn * factor;\r
262 norm[2] = blu * factor;\r
263 norm = this.colorSpace.fromRGB (norm);\r
264 if (this.supportsAlpha) {\r
265 alp = (rgb >> 24) & 0xff;\r
266 if (this.$isAlphaPremultiplied) {\r
267 factor *= alp;\r
268 for (var i = 0; i < 3; i++) {\r
269 norm[i] *= factor;\r
270 }\r
271 }if (this.nBits[3] != 8) {\r
272 alp = Clazz.floatToInt ((alp * (0.003921569) * ((1 << this.nBits[3]) - 1)) + 0.5);\r
273 if (alp > ((1 << this.nBits[3]) - 1)) {\r
274 alp = (1 << this.nBits[3]) - 1;\r
275 }}intpixel[0] = alp << this.maskOffsets[3];\r
276 }red = Clazz.floatToInt ((norm[0] * ((1 << this.nBits[0]) - 1)) + 0.5);\r
277 grn = Clazz.floatToInt ((norm[1] * ((1 << this.nBits[1]) - 1)) + 0.5);\r
278 blu = Clazz.floatToInt ((norm[2] * ((1 << this.nBits[2]) - 1)) + 0.5);\r
279 }if (this.maxBits > 23) {\r
280 if (red > ((1 << this.nBits[0]) - 1)) {\r
281 red = (1 << this.nBits[0]) - 1;\r
282 }if (grn > ((1 << this.nBits[1]) - 1)) {\r
283 grn = (1 << this.nBits[1]) - 1;\r
284 }if (blu > ((1 << this.nBits[2]) - 1)) {\r
285 blu = (1 << this.nBits[2]) - 1;\r
286 }}intpixel[0] |= (red << this.maskOffsets[0]) | (grn << this.maskOffsets[1]) | (blu << this.maskOffsets[2]);\r
287 switch (this.transferType) {\r
288 case 0:\r
289 {\r
290 var bdata;\r
291 if (pixel == null) {\r
292 bdata =  Clazz.newByteArray (1, 0);\r
293 } else {\r
294 bdata = pixel;\r
295 }bdata[0] = (0xff & intpixel[0]);\r
296 return bdata;\r
297 }case 3:\r
298 return intpixel;\r
299 }\r
300 throw  new UnsupportedOperationException ("This method has not been " + "implemented for transferType " + this.transferType);\r
301 }, "~N,~O");\r
302 Clazz.defineMethod (c$, "getComponents", \r
303 function (pixel, components, offset) {\r
304 if (components == null) {\r
305 components =  Clazz.newIntArray (offset + this.numComponents, 0);\r
306 }for (var i = 0; i < this.numComponents; i++) {\r
307 components[offset + i] = (pixel & this.maskArray[i]) >>> this.maskOffsets[i];\r
308 }\r
309 return components;\r
310 }, "~N,~A,~N");\r
311 Clazz.defineMethod (c$, "getComponents", \r
312 function (pixel, components, offset) {\r
313 var intpixel = 0;\r
314 switch (this.transferType) {\r
315 case 0:\r
316 var bdata = pixel;\r
317 intpixel = bdata[0] & 0xff;\r
318 break;\r
319 case 3:\r
320 var idata = pixel;\r
321 intpixel = idata[0];\r
322 break;\r
323 default:\r
324 throw  new UnsupportedOperationException ("This method has not been " + "implemented for transferType " + this.transferType);\r
325 }\r
326 return this.getComponents (intpixel, components, offset);\r
327 }, "~O,~A,~N");\r
328 Clazz.overrideMethod (c$, "createCompatibleWritableRaster", \r
329 function (w, h) {\r
330 if ((w <= 0) || (h <= 0)) {\r
331 throw  new IllegalArgumentException ("Width (" + w + ") and height (" + h + ") cannot be <= 0");\r
332 }var bandmasks;\r
333 if (this.supportsAlpha) {\r
334 bandmasks =  Clazz.newIntArray (4, 0);\r
335 bandmasks[3] = this.alpha_mask;\r
336 } else {\r
337 bandmasks =  Clazz.newIntArray (3, 0);\r
338 }bandmasks[0] = this.red_mask;\r
339 bandmasks[1] = this.green_mask;\r
340 bandmasks[2] = this.blue_mask;\r
341 if (this.pixel_bits > 8) {\r
342 return java.awt.image.Raster.createPackedRaster (3, w, h, bandmasks, null);\r
343 } else {\r
344 return java.awt.image.Raster.createPackedRaster (0, w, h, bandmasks, null);\r
345 }}, "~N,~N");\r
346 Clazz.defineMethod (c$, "getDataElement", \r
347 function (components, offset) {\r
348 var pixel = 0;\r
349 for (var i = 0; i < this.numComponents; i++) {\r
350 pixel |= ((components[offset + i] << this.maskOffsets[i]) & this.maskArray[i]);\r
351 }\r
352 return pixel;\r
353 }, "~A,~N");\r
354 Clazz.defineMethod (c$, "getDataElements", \r
355 function (components, offset, obj) {\r
356 var pixel = 0;\r
357 for (var i = 0; i < this.numComponents; i++) {\r
358 pixel |= ((components[offset + i] << this.maskOffsets[i]) & this.maskArray[i]);\r
359 }\r
360 switch (this.transferType) {\r
361 case 0:\r
362 if (Clazz.instanceOf (obj, Array)) {\r
363 var bdata = obj;\r
364 bdata[0] = (pixel & 0xff);\r
365 return bdata;\r
366 } else {\r
367 var bdata =  Clazz.newByteArray (-1, [(pixel & 0xff)]);\r
368 return bdata;\r
369 }case 3:\r
370 if (Clazz.instanceOf (obj, Array)) {\r
371 var idata = obj;\r
372 idata[0] = pixel;\r
373 return idata;\r
374 } else {\r
375 var idata =  Clazz.newIntArray (-1, [pixel]);\r
376 return idata;\r
377 }default:\r
378 throw  new ClassCastException ("This method has not been " + "implemented for transferType " + this.transferType);\r
379 }\r
380 }, "~A,~N,~O");\r
381 Clazz.overrideMethod (c$, "toString", \r
382 function () {\r
383 return  String.instantialize ("DirectColorModel: rmask=" + Integer.toHexString (this.red_mask) + " gmask=" + Integer.toHexString (this.green_mask) + " bmask=" + Integer.toHexString (this.blue_mask) + " amask=" + Integer.toHexString (this.alpha_mask));\r
384 });\r
385 });\r