53ee3cde8f539d5db1630c7512a42122f01c72c6
[jalviewjs.git] / site / swingjs / j2s / swingjs / JSImagekit.js
1 Clazz.declarePackage ("swingjs");\r
2 Clazz.load (null, "swingjs.JSImagekit", ["java.util.Arrays", "swingjs.JSImage", "swingjs.api.Interface"], function () {\r
3 c$ = Clazz.declareType (swingjs, "JSImagekit");\r
4 Clazz.makeConstructor (c$, \r
5 function () {\r
6 });\r
7 Clazz.defineMethod (c$, "createImageFromBytes", \r
8 function (data, imageoffset, imagelength) {\r
9 var w = 0;\r
10 var h = 0;\r
11 var argb = null;\r
12 var b = null;\r
13 var type = null;\r
14 if (data == null) {\r
15 w = imageoffset;\r
16 h = imagelength;\r
17 } else {\r
18 if (imagelength < 0) imagelength = data.length;\r
19 b = java.util.Arrays.copyOfRange (data, imageoffset, imagelength);\r
20 if (b.length < 54) return null;\r
21 switch (this.getSourceType (b)) {\r
22 case 3:\r
23 var ie = swingjs.api.Interface.getInstance ("javajs.img.BMPDecoder", true);\r
24 var o = ie.decodeWindowsBMP (b);\r
25 if (o == null || o[0] == null) return null;\r
26 w = (o[1]).intValue ();\r
27 h = (o[2]).intValue ();\r
28 argb = o[0];\r
29 break;\r
30 case 1:\r
31 var pt = 2;\r
32 while (true) {\r
33 switch (this.getInt (b, pt)) {\r
34 case 49407:\r
35 case 49919:\r
36 h = this.getIntRev (b, pt + 5);\r
37 w = this.getIntRev (b, pt + 7);\r
38 pt = 0;\r
39 break;\r
40 }\r
41 if (pt == 0) break;\r
42 pt += 2 + this.getIntRev (b, pt + 2);\r
43 }\r
44 type = "jpeg";\r
45 break;\r
46 case 0:\r
47 w = this.getLong (b, 16);\r
48 h = this.getLong (b, 20);\r
49 type = "png";\r
50 break;\r
51 case 2:\r
52 w = this.getInt (b, 6);\r
53 h = this.getInt (b, 8);\r
54 type = "gif";\r
55 break;\r
56 case -1:\r
57 System.out.println ("JSImagekit: Unknown image type: " + b[0] + " " + b[1] + " " + b[2] + " " + b[3]);\r
58 data = null;\r
59 break;\r
60 }\r
61 }if (w == 0 || h == 0) return null;\r
62 var jsimage =  new swingjs.JSImage (argb, w, h);\r
63 if (data != null && argb == null) jsimage.getDOMImage (b, type);\r
64 return jsimage;\r
65 }, "~A,~N,~N");\r
66 Clazz.defineMethod (c$, "getLong", \r
67  function (b, pt) {\r
68 return ((b[pt] & 0xFF) << 24) + ((b[pt + 1] & 0xFF) << 16) + ((b[pt + 2] & 0xFF) << 8) + (b[pt + 3] & 0xFF);\r
69 }, "~A,~N");\r
70 Clazz.defineMethod (c$, "getInt", \r
71  function (b, pt) {\r
72 return (b[pt] & 0xFF) + ((b[pt + 1] & 0xFF) << 8);\r
73 }, "~A,~N");\r
74 Clazz.defineMethod (c$, "getIntRev", \r
75  function (b, pt) {\r
76 return ((b[pt] & 0xFF) << 8) + (b[pt + 1] & 0xFF);\r
77 }, "~A,~N");\r
78 Clazz.defineMethod (c$, "getSourceType", \r
79  function (b) {\r
80 return ((b[0] & 0xFF) == 0x89 && b[1] == 80 && b[2] == 78 && b[3] == 71 ? 0 : (b[0] & 0xFF) == 0xFF && (b[1] & 0xFF) == 0xD8 ? 1 : b[0] == 71 && b[1] == 73 && b[2] == 70 ? 2 : b[0] == 66 && b[1] == 77 ? 3 : -1);\r
81 }, "~A");\r
82 Clazz.defineStatics (c$,\r
83 "UNK", -1,\r
84 "PNG", 0,\r
85 "JPG", 1,\r
86 "GIF", 2,\r
87 "BMP", 3,\r
88 "JPG_SOF0", 0xC0FF,\r
89 "JPG_SOF2", 0xC2FF);\r
90 });\r