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