1 Clazz.declarePackage ("java.awt.image");
\r
2 Clazz.load (["java.awt.image.BufferedImageOp", "$.RasterOp"], "java.awt.image.RescaleOp", ["java.lang.IllegalArgumentException", "java.awt.geom.Point2D", "java.awt.image.BufferedImage", "$.ByteLookupTable", "$.ImagingOpException", "$.LookupOp", "swingjs.JSToolkit"], function () {
\r
3 c$ = Clazz.decorateAsClass (function () {
\r
4 this.scaleFactors = null;
\r
8 this.swingJStype = 'R';
\r
11 Clazz.instantialize (this, arguments);
\r
12 }, java.awt.image, "RescaleOp", null, [java.awt.image.BufferedImageOp, java.awt.image.RasterOp]);
\r
13 Clazz.makeConstructor (c$,
\r
14 function (scaleFactors, offsets, hints) {
\r
15 this.length = scaleFactors.length;
\r
16 if (this.length > offsets.length) this.length = offsets.length;
\r
17 this.scaleFactors = Clazz.newFloatArray (this.length, 0);
\r
18 this.offsets = Clazz.newFloatArray (this.length, 0);
\r
19 for (var i = 0; i < this.length; i++) {
\r
20 this.scaleFactors[i] = scaleFactors[i];
\r
21 this.offsets[i] = offsets[i];
\r
24 }, "~A,~A,java.awt.RenderingHints");
\r
25 Clazz.makeConstructor (c$,
\r
26 function (scaleFactor, offset, hints) {
\r
28 this.scaleFactors = Clazz.newFloatArray (1, 0);
\r
29 this.offsets = Clazz.newFloatArray (1, 0);
\r
30 this.scaleFactors[0] = scaleFactor;
\r
31 this.offsets[0] = offset;
\r
33 }, "~N,~N,java.awt.RenderingHints");
\r
34 Clazz.defineMethod (c$, "getScaleFactors",
\r
35 function (scaleFactors) {
\r
36 if (scaleFactors == null) {
\r
37 return this.scaleFactors.clone ();
\r
38 }System.arraycopy (this.scaleFactors, 0, scaleFactors, 0, Math.min (this.scaleFactors.length, scaleFactors.length));
\r
39 return scaleFactors;
\r
41 Clazz.defineMethod (c$, "getOffsets",
\r
42 function (offsets) {
\r
43 if (offsets == null) {
\r
44 return this.offsets.clone ();
\r
45 }System.arraycopy (this.offsets, 0, offsets, 0, Math.min (this.offsets.length, offsets.length));
\r
48 Clazz.defineMethod (c$, "getNumFactors",
\r
52 Clazz.defineMethod (c$, "createByteLut",
\r
53 function (scale, off, nBands, nElems) {
\r
54 var lutData = Clazz.newByteArray (scale.length, nElems, 0);
\r
55 for (var band = 0; band < scale.length; band++) {
\r
56 var bandScale = scale[band];
\r
57 var bandOff = off[band];
\r
58 var bandLutData = lutData[band];
\r
59 for (var i = 0; i < nElems; i++) {
\r
60 var val = Clazz.floatToInt (i * bandScale + bandOff);
\r
61 if ((val & 0xffffff00) != 0) {
\r
66 }}bandLutData[i] = val;
\r
69 return new java.awt.image.ByteLookupTable (0, lutData);
\r
71 Clazz.defineMethod (c$, "canUseLookup",
\r
72 function (src, dst) {
\r
73 var datatype = src.getDataBuffer ().getDataType ();
\r
74 if (datatype != 0) {
\r
76 }var dstSM = dst.getSampleModel ();
\r
77 this.dstNbits = dstSM.getSampleSize (0);
\r
78 if (!(this.dstNbits == 8 || this.dstNbits == 16)) {
\r
80 }for (var i = 1; i < src.getNumBands (); i++) {
\r
81 var bandSize = dstSM.getSampleSize (i);
\r
82 if (bandSize != this.dstNbits) {
\r
85 var srcSM = src.getSampleModel ();
\r
86 this.srcNbits = srcSM.getSampleSize (0);
\r
87 if (this.srcNbits > 16) {
\r
89 }for (var i = 1; i < src.getNumBands (); i++) {
\r
90 var bandSize = srcSM.getSampleSize (i);
\r
91 if (bandSize != this.srcNbits) {
\r
95 }, "java.awt.image.Raster,java.awt.image.Raster");
\r
96 Clazz.defineMethod (c$, "filter",
\r
97 function (src, dst) {
\r
98 var srcCM = src.getColorModel ();
\r
100 var numBands = srcCM.getNumColorComponents ();
\r
101 if (this.length != 1 && this.length != numBands && this.length != srcCM.getNumComponents ()) {
\r
102 throw new IllegalArgumentException ("Number of scaling constants does not equal the number of of color or color/alpha components");
\r
103 }if (this.length > numBands && srcCM.hasAlpha ()) {
\r
104 this.length = numBands + 1;
\r
105 }var width = src.getWidth ();
\r
106 var height = src.getHeight ();
\r
108 dst = this.createCompatibleDestImage (src, null);
\r
111 if (width != dst.getWidth ()) {
\r
112 throw new IllegalArgumentException ("Src width (" + width + ") not equal to dst width (" + dst.getWidth () + ")");
\r
113 }if (height != dst.getHeight ()) {
\r
114 throw new IllegalArgumentException ("Src height (" + height + ") not equal to dst height (" + dst.getHeight () + ")");
\r
115 }dstCM = dst.getColorModel ();
\r
116 if (srcCM.getColorSpace ().getType () != dstCM.getColorSpace ().getType ()) {
\r
117 swingjs.JSToolkit.notImplemented (null);
\r
118 throw new java.awt.image.ImagingOpException ("SwingJS only supports RGB color space");
\r
119 }}var origDst = dst;
\r
120 var srcRaster = src.getRaster ();
\r
121 var dstRaster = dst.getRaster ();
\r
122 if (srcCM.hasAlpha ()) {
\r
123 if (numBands - 1 == this.length || this.length == 1) {
\r
124 var minx = srcRaster.getMinX ();
\r
125 var miny = srcRaster.getMinY ();
\r
126 var bands = Clazz.newIntArray (numBands - 1, 0);
\r
127 for (var i = 0; i < numBands - 1; i++) {
\r
130 srcRaster = srcRaster.createWritableChild (minx, miny, srcRaster.getWidth (), srcRaster.getHeight (), minx, miny, bands);
\r
131 }}if (dstCM.hasAlpha ()) {
\r
132 var dstNumBands = dstRaster.getNumBands ();
\r
133 if (dstNumBands - 1 == this.length || this.length == 1) {
\r
134 var minx = dstRaster.getMinX ();
\r
135 var miny = dstRaster.getMinY ();
\r
136 var bands = Clazz.newIntArray (numBands - 1, 0);
\r
137 for (var i = 0; i < numBands - 1; i++) {
\r
140 dstRaster = dstRaster.createWritableChild (minx, miny, dstRaster.getWidth (), dstRaster.getHeight (), minx, miny, bands);
\r
141 }}this.filter (srcRaster, dstRaster);
\r
143 }, "java.awt.image.BufferedImage,java.awt.image.BufferedImage");
\r
144 Clazz.defineMethod (c$, "filter",
\r
145 function (src, dst) {
\r
146 var numBands = src.getNumBands ();
\r
147 var width = src.getWidth ();
\r
148 var height = src.getHeight ();
\r
153 dst = this.createCompatibleDestRaster (src);
\r
154 } else if (height != dst.getHeight () || width != dst.getWidth ()) {
\r
155 throw new IllegalArgumentException ("Width or height of Rasters do not match");
\r
156 } else if (numBands != dst.getNumBands ()) {
\r
157 throw new IllegalArgumentException ("Number of bands in src " + numBands + " does not equal number of bands in dest " + dst.getNumBands ());
\r
158 }if (this.length != 1 && this.length != src.getNumBands ()) {
\r
159 throw new IllegalArgumentException ("Number of scaling constants does not equal the number of of bands in the src raster");
\r
160 }if (this.canUseLookup (src, dst)) {
\r
161 var srcNgray = (1 << this.srcNbits);
\r
162 var dstNgray = (1 << this.dstNbits);
\r
163 if (dstNgray != 256) {
\r
164 throw new java.awt.image.ImagingOpException ("SwingJS requires 256 gray scale");
\r
165 }if (dstNgray == 256) {
\r
166 var lut = this.createByteLut (this.scaleFactors, this.offsets, numBands, srcNgray);
\r
167 var op = new java.awt.image.LookupOp (lut, this.hints);
\r
168 op.filter (src, dst);
\r
170 if (this.length > 1) {
\r
172 }var sminX = src.getMinX ();
\r
173 var sY = src.getMinY ();
\r
174 var dminX = dst.getMinX ();
\r
175 var dY = dst.getMinY ();
\r
179 var dstMax = Clazz.newIntArray (numBands, 0);
\r
180 var dstMask = Clazz.newIntArray (numBands, 0);
\r
181 var dstSM = dst.getSampleModel ();
\r
182 for (var z = 0; z < numBands; z++) {
\r
183 nbits = dstSM.getSampleSize (z);
\r
184 dstMax[z] = (1 << nbits) - 1;
\r
185 dstMask[z] = ~(dstMax[z]);
\r
188 for (var y = 0; y < height; y++, sY++, dY++) {
\r
191 for (var x = 0; x < width; x++, sX++, dX++) {
\r
192 srcPix = src.getPixel (sX, sY, srcPix);
\r
194 for (var z = 0; z < numBands; z++, tidx += step) {
\r
195 val = Clazz.floatToInt (srcPix[z] * this.scaleFactors[tidx] + this.offsets[tidx]);
\r
196 if ((val & dstMask[z]) != 0) {
\r
203 dst.setPixel (dX, dY, srcPix);
\r
207 }, "java.awt.image.Raster,java.awt.image.WritableRaster");
\r
208 Clazz.defineMethod (c$, "getBounds2D",
\r
210 return this.getBounds2D (src.getRaster ());
\r
211 }, "java.awt.image.BufferedImage");
\r
212 Clazz.defineMethod (c$, "getBounds2D",
\r
214 return src.getBounds ();
\r
215 }, "java.awt.image.Raster");
\r
216 Clazz.overrideMethod (c$, "createCompatibleDestImage",
\r
217 function (src, destCM) {
\r
219 if (destCM == null) {
\r
220 var cm = src.getColorModel ();
\r
221 image = new java.awt.image.BufferedImage (cm, src.getRaster ().createCompatibleWritableRaster (), cm.isAlphaPremultiplied (), null);
\r
223 var w = src.getWidth ();
\r
224 var h = src.getHeight ();
\r
225 image = new java.awt.image.BufferedImage (destCM, destCM.createCompatibleWritableRaster (w, h), destCM.isAlphaPremultiplied (), null);
\r
227 }, "java.awt.image.BufferedImage,java.awt.image.ColorModel");
\r
228 Clazz.overrideMethod (c$, "createCompatibleDestRaster",
\r
230 return src.createCompatibleWritableRaster (src.getWidth (), src.getHeight ());
\r
231 }, "java.awt.image.Raster");
\r
232 Clazz.overrideMethod (c$, "getPoint2D",
\r
233 function (srcPt, dstPt) {
\r
234 if (dstPt == null) {
\r
235 dstPt = new java.awt.geom.Point2D.Float ();
\r
236 }dstPt.setLocation (srcPt.getX (), srcPt.getY ());
\r
238 }, "java.awt.geom.Point2D,java.awt.geom.Point2D");
\r
239 Clazz.overrideMethod (c$, "getRenderingHints",
\r