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
8 public class JSImage extends BufferedImage {
\r
9 // a BufferedImage in name only, actually;
\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
16 super(1,1, TYPE_INT_ARGB);
\r
20 public JSImage setData(int width, int height, int[] argb) {
\r
23 this.height = height;
\r
24 getColorModel().createCompatibleWritableRaster(width, height);
\r
29 * convert [r g b a r g b a ...] into [argb argb argb ...]
\r
31 * currently does not respect transparency
\r
33 * @param imgData HTML5 canvas.context.imageData.data
\r
34 * @return array of ARGB values
\r
37 int[] toIntARGB(int[] imgData) {
\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
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
52 * Use HTML5 to load PNG, JPG, or GIF image in order to extract its pixels
\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
64 * img = new Image(this.width, this.height);
\r
65 * //img.onLoad = function() { me.setDOMImage(img); };
\r
66 * img.src = dataurl;
\r
73 * callback from Image.src = ... ; extract the int[] data from this image;
\r
74 * also sets img._pbuf32 for graphing
\r
77 @SuppressWarnings("unused")
\r
78 public void setDOMImage(DOMNode img) {
\r
79 DOMNode canvas = DOMNode.createElement("canvas", "JSImage");
\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
100 public int getHeight(ImageObserver o) {
\r
105 public int getWidth(ImageObserver o) {
\r