1 Clazz.declarePackage ("java.awt.image");
\r
2 Clazz.load (["java.awt.image.ImageConsumer"], "java.awt.image.PixelGrabber", ["java.awt.image.ColorModel", "swingjs.JSToolkit"], function () {
\r
3 c$ = Clazz.decorateAsClass (function () {
\r
4 this.producer = null;
\r
9 this.imageModel = null;
\r
10 this.bytePixels = null;
\r
11 this.intPixels = null;
\r
14 this.grabbing = false;
\r
16 Clazz.instantialize (this, arguments);
\r
17 }, java.awt.image, "PixelGrabber", null, java.awt.image.ImageConsumer);
\r
18 Clazz.makeConstructor (c$,
\r
19 function (img, x, y, w, h, pix, off, scansize) {
\r
20 this.construct (img.getSource (), x, y, w, h, pix, off, scansize);
\r
21 }, "java.awt.Image,~N,~N,~N,~N,~A,~N,~N");
\r
22 Clazz.makeConstructor (c$,
\r
23 function (ip, x, y, w, h, pix, off, scansize) {
\r
30 this.dstScan = scansize;
\r
31 this.intPixels = pix;
\r
32 this.imageModel = java.awt.image.ColorModel.getRGBdefault ();
\r
33 }, "java.awt.image.ImageProducer,~N,~N,~N,~N,~A,~N,~N");
\r
34 Clazz.makeConstructor (c$,
\r
35 function (img, x, y, w, h, forceRGB) {
\r
36 this.producer = img.getSource ();
\r
42 this.imageModel = java.awt.image.ColorModel.getRGBdefault ();
\r
43 }}, "java.awt.Image,~N,~N,~N,~N,~B");
\r
44 Clazz.defineMethod (c$, "startGrabbing",
\r
46 if ((this.flags & 112) != 0) {
\r
48 }if (!this.grabbing) {
\r
49 this.grabbing = true;
\r
51 this.producer.startProduction (this);
\r
53 Clazz.defineMethod (c$, "abortGrabbing",
\r
55 this.imageComplete (4);
\r
57 Clazz.defineMethod (c$, "grabPixels",
\r
59 return this.grabPixels (0);
\r
61 Clazz.defineMethod (c$, "grabPixels",
\r
63 if ((this.flags & 112) != 0) {
\r
64 return (this.flags & 48) != 0;
\r
65 }var end = ms + System.currentTimeMillis ();
\r
66 if (!this.grabbing) {
\r
67 this.grabbing = true;
\r
69 this.producer.startProduction (this);
\r
70 }while (this.grabbing) {
\r
75 timeout = end - System.currentTimeMillis ();
\r
78 }}swingjs.JSToolkit.warn ("wait in PixelGrabber.grabPixels");
\r
79 this.wait (timeout);
\r
81 return (this.flags & 48) != 0;
\r
83 Clazz.defineMethod (c$, "getStatus",
\r
87 Clazz.defineMethod (c$, "getWidth",
\r
89 return (this.dstW < 0) ? -1 : this.dstW;
\r
91 Clazz.defineMethod (c$, "getHeight",
\r
93 return (this.dstH < 0) ? -1 : this.dstH;
\r
95 Clazz.defineMethod (c$, "getPixels",
\r
97 return (this.bytePixels == null) ? (this.intPixels) : (this.bytePixels);
\r
99 Clazz.defineMethod (c$, "getColorModel",
\r
101 return this.imageModel;
\r
103 Clazz.overrideMethod (c$, "setDimensions",
\r
104 function (width, height) {
\r
105 if (this.dstW < 0) {
\r
106 this.dstW = width - this.dstX;
\r
107 }if (this.dstH < 0) {
\r
108 this.dstH = height - this.dstY;
\r
109 }if (this.dstW <= 0 || this.dstH <= 0) {
\r
110 this.imageComplete (3);
\r
111 } else if (this.intPixels == null && this.imageModel === java.awt.image.ColorModel.getRGBdefault ()) {
\r
112 this.intPixels = Clazz.newIntArray (this.dstW * this.dstH, 0);
\r
113 this.dstScan = this.dstW;
\r
115 }this.flags |= (3);
\r
117 Clazz.overrideMethod (c$, "setHints",
\r
121 Clazz.overrideMethod (c$, "setProperties",
\r
124 }, "java.util.Hashtable");
\r
125 Clazz.overrideMethod (c$, "setColorModel",
\r
128 }, "java.awt.image.ColorModel");
\r
129 Clazz.defineMethod (c$, "convertToRGB",
\r
131 var size = this.dstW * this.dstH;
\r
132 var newpixels = Clazz.newIntArray (size, 0);
\r
133 if (this.bytePixels != null) {
\r
134 for (var i = 0; i < size; i++) {
\r
135 newpixels[i] = this.imageModel.getRGB (this.bytePixels[i] & 0xff);
\r
137 } else if (this.intPixels != null) {
\r
138 for (var i = 0; i < size; i++) {
\r
139 newpixels[i] = this.imageModel.getRGB (this.intPixels[i]);
\r
141 }this.bytePixels = null;
\r
142 this.intPixels = newpixels;
\r
143 this.dstScan = this.dstW;
\r
145 this.imageModel = java.awt.image.ColorModel.getRGBdefault ();
\r
147 Clazz.defineMethod (c$, "setPixels",
\r
148 function (srcX, srcY, srcW, srcH, model, pixels, srcOff, srcScan) {
\r
149 if (srcY < this.dstY) {
\r
150 var diff = this.dstY - srcY;
\r
151 if (diff >= srcH) {
\r
153 }srcOff += srcScan * diff;
\r
156 }if (srcY + srcH > this.dstY + this.dstH) {
\r
157 srcH = (this.dstY + this.dstH) - srcY;
\r
160 }}if (srcX < this.dstX) {
\r
161 var diff = this.dstX - srcX;
\r
162 if (diff >= srcW) {
\r
167 }if (srcX + srcW > this.dstX + this.dstW) {
\r
168 srcW = (this.dstX + this.dstW) - srcX;
\r
171 }}var dstPtr = this.dstOff + (srcY - this.dstY) * this.dstScan + (srcX - this.dstX);
\r
172 if (this.intPixels == null) {
\r
173 if (this.bytePixels == null) {
\r
174 this.bytePixels = Clazz.newByteArray (this.dstW * this.dstH, 0);
\r
175 this.dstScan = this.dstW;
\r
177 this.imageModel = model;
\r
178 } else if (this.imageModel !== model) {
\r
179 this.convertToRGB ();
\r
180 }if (this.bytePixels != null) {
\r
181 for (var h = srcH; h > 0; h--) {
\r
182 System.arraycopy (pixels, srcOff, this.bytePixels, dstPtr, srcW);
\r
184 dstPtr += this.dstScan;
\r
186 }}if (this.intPixels != null) {
\r
187 var dstRem = this.dstScan - srcW;
\r
188 var srcRem = srcScan - srcW;
\r
189 for (var h = srcH; h > 0; h--) {
\r
190 for (var w = srcW; w > 0; w--) {
\r
191 this.intPixels[dstPtr++] = model.getRGB (pixels[srcOff++] & 0xff);
\r
197 }, "~N,~N,~N,~N,java.awt.image.ColorModel,~A,~N,~N");
\r
198 Clazz.defineMethod (c$, "setPixels",
\r
199 function (srcX, srcY, srcW, srcH, model, pixels, srcOff, srcScan) {
\r
200 if (srcY < this.dstY) {
\r
201 var diff = this.dstY - srcY;
\r
202 if (diff >= srcH) {
\r
204 }srcOff += srcScan * diff;
\r
207 }if (srcY + srcH > this.dstY + this.dstH) {
\r
208 srcH = (this.dstY + this.dstH) - srcY;
\r
211 }}if (srcX < this.dstX) {
\r
212 var diff = this.dstX - srcX;
\r
213 if (diff >= srcW) {
\r
218 }if (srcX + srcW > this.dstX + this.dstW) {
\r
219 srcW = (this.dstX + this.dstW) - srcX;
\r
222 }}if (this.intPixels == null) {
\r
223 if (this.bytePixels == null) {
\r
224 this.intPixels = Clazz.newIntArray (this.dstW * this.dstH, 0);
\r
225 this.dstScan = this.dstW;
\r
227 this.imageModel = model;
\r
229 this.convertToRGB ();
\r
230 }}var dstPtr = this.dstOff + (srcY - this.dstY) * this.dstScan + (srcX - this.dstX);
\r
231 if (this.imageModel === model) {
\r
232 for (var h = srcH; h > 0; h--) {
\r
233 System.arraycopy (pixels, srcOff, this.intPixels, dstPtr, srcW);
\r
235 dstPtr += this.dstScan;
\r
238 if (this.imageModel !== java.awt.image.ColorModel.getRGBdefault ()) {
\r
239 this.convertToRGB ();
\r
240 }var dstRem = this.dstScan - srcW;
\r
241 var srcRem = srcScan - srcW;
\r
242 for (var h = srcH; h > 0; h--) {
\r
243 for (var w = srcW; w > 0; w--) {
\r
244 this.intPixels[dstPtr++] = model.getRGB (pixels[srcOff++]);
\r
250 }, "~N,~N,~N,~N,java.awt.image.ColorModel,~A,~N,~N");
\r
251 Clazz.overrideMethod (c$, "imageComplete",
\r
252 function (status) {
\r
253 this.grabbing = false;
\r
269 this.producer.removeConsumer (this);
\r
271 Clazz.defineMethod (c$, "status",
\r
275 Clazz.defineStatics (c$,
\r
276 "GRABBEDBITS", (48),
\r
277 "DONEBITS", (112));
\r