JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / src / swingjs / JSImage.java
1 package swingjs;\r
2 \r
3 import javajs.util.Base64;\r
4 import swingjs.api.DOMNode;\r
5 import java.awt.image.BufferedImage;\r
6 import java.awt.image.ImageObserver;\r
7 \r
8 public class JSImage extends BufferedImage {\r
9         // a BufferedImage in name only, actually;\r
10         int typeRequested;\r
11         int[] pix;  // not used in Java, but may be used in JavaScript\r
12         public DOMNode _imgNode; // used by JSGraphics2D directly\r
13         private int width, height;\r
14         \r
15         public JSImage() {\r
16                 super(1,1, TYPE_INT_ARGB);\r
17                 \r
18         }\r
19 \r
20         public JSImage setData(int width, int height, int[] argb) {\r
21                 pix = argb;\r
22                 this.width = width;\r
23                 this.height = height;\r
24                 getColorModel().createCompatibleWritableRaster(width, height);\r
25                 return this;\r
26         }\r
27         \r
28         /**\r
29          * convert [r g b a  r g b a ...] into [argb argb argb ...]\r
30          * \r
31          * currently does not respect transparency\r
32          * \r
33          * @param imgData HTML5 canvas.context.imageData.data\r
34          * @return array of ARGB values\r
35          * \r
36          */\r
37   int[] toIntARGB(int[] imgData) {\r
38     /*\r
39      * red=imgData.data[0];\r
40      * green=imgData.data[1];\r
41      * blue=imgData.data[2];\r
42      * alpha=imgData.data[3];\r
43      */\r
44     int n = imgData.length / 4;\r
45     int[] iData = new int[n];\r
46     for (int i = 0, j = 0; i < n; j++)\r
47       iData[i++] = (imgData[j++] << 16) | (imgData[j++] << 8) | imgData[j++] | 0xFF000000;\r
48     return iData;\r
49   }      \r
50   \r
51   /**\r
52    * Use HTML5 to load PNG, JPG, or GIF image in order to extract its pixels\r
53    * \r
54    * @param b\r
55    * @param type\r
56    */\r
57         @SuppressWarnings("unused")\r
58         public void getDOMImage(byte[] b, String type) {\r
59                 String dataurl = "data:image/" + type + ";base64,"  + Base64.getBase64(b).toString();\r
60                 Object me = this;\r
61                 DOMNode img = null;\r
62                 /**\r
63                  * @j2sNative\r
64                  *   img = new Image(this.width, this.height);\r
65                  *   //img.onLoad = function() { me.setDOMImage(img); };\r
66                  *   img.src = dataurl;\r
67                  */\r
68                 {}\r
69                 setDOMImage(img);\r
70         }\r
71                 \r
72         /**\r
73          * callback from Image.src = ... ; extract the int[] data from this image;\r
74          * also sets img._pbuf32 for graphing\r
75          * \r
76          */\r
77         @SuppressWarnings("unused")\r
78         public void setDOMImage(DOMNode img) {\r
79                 DOMNode canvas = DOMNode.createElement("canvas", "JSImage");\r
80                 int w = width;\r
81                 int h = height;\r
82                 _imgNode = img;\r
83                 /**\r
84                  * @j2sNative\r
85                  * \r
86                  * canvas.width = w;\r
87                  * canvas.height = h;\r
88                  * var ctx = canvas.getContext("2d");\r
89                  * ctx.drawImage(img, 0, 0, w, h);\r
90                  * var data = ctx.getImageData(0, 0, w, h).data;\r
91                  * img._pbuf32 = this.toIntARGB(data);\r
92                  * \r
93                  */\r
94                 {\r
95                         toIntARGB(null);\r
96                 }\r
97         }\r
98 \r
99         @Override\r
100         public int getHeight(ImageObserver o) {\r
101                 return height;\r
102         }\r
103 \r
104         @Override\r
105         public int getWidth(ImageObserver o) {\r
106                 return width;\r
107         }\r
108 \r
109 }\r