15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25 package org.jemmy.image.pixel;
26
27 import org.jemmy.Dimension;
28
29 /**
30 *
31 * @author shura
32 */
33 public class AverageDistanceComparator extends ThresholdComparator {
34
35 /**
36 *
37 * @param threshold
38 */
39 public AverageDistanceComparator(double threshold) {
40 super(0, Math.sqrt(3));
41 setThreshold(threshold);
42 }
43
44 /**
45 *
46 * @param image1
47 * @param image2
48 * @return
49 */
50 public boolean compare(Raster image1, Raster image2) {
51 Dimension size = PixelImageComparator.computeDiffSize(image1, image2);
52 if (size == null) {
53 return false;
54 }
55 int totalPixels = size.width * size.height;
56 double distance = 0;
57 double[] colors1 = new double[image1.getSupported().length];
58 double[] colors2 = new double[image2.getSupported().length];
59 for (int x = 0; x < size.width; x++) {
60 for (int y = 0; y < size.height; y++) {
61 image1.getColors(x, y, colors1);
62 image2.getColors(x, y, colors2);
63 distance += distance(image1.getSupported(), colors1, image2.getSupported(), colors2) / totalPixels;
64 }
65 }
66 return distance < getThreshold();
67 }
68
69 public static final Raster.Component[] DISTANCE_COMPONENTS = {
70 Raster.Component.RED, Raster.Component.BLUE, Raster.Component.GREEN
71 };
72 static double distance(Raster.Component[] comps1, double[] colors1, Raster.Component[] comps2, double[] colors2) {
73 double res = 0;
74 double diff;
75 for (Raster.Component c : DISTANCE_COMPONENTS) {
76 diff = colors2[PixelImageComparator.arrayIndexOf(comps2, c)] -
77 colors1[PixelImageComparator.arrayIndexOf(comps1, c)];
78 res += diff * diff;
79 }
80 return Math.sqrt(res);
81 }
82
83 /**
84 *
85 * @return
86 */
87 public String getID() {
88 return AverageDistanceComparator.class.getName() + ":" + getThreshold();
89 }
90 }
|
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25 package org.jemmy.image.pixel;
26
27 import org.jemmy.Dimension;
28
29 /**
30 *
31 * @author shura
32 */
33 public class AverageDistanceComparator extends ThresholdComparator {
34
35 public AverageDistanceComparator(double threshold) {
36 super(0, Math.sqrt(3));
37 setThreshold(threshold);
38 }
39
40 public boolean compare(Raster image1, Raster image2) {
41 Dimension size = PixelImageComparator.computeDiffSize(image1, image2);
42 if (size == null) {
43 return false;
44 }
45 int totalPixels = size.width * size.height;
46 double distance = 0;
47 double[] colors1 = new double[image1.getSupported().length];
48 double[] colors2 = new double[image2.getSupported().length];
49 for (int x = 0; x < size.width; x++) {
50 for (int y = 0; y < size.height; y++) {
51 image1.getColors(x, y, colors1);
52 image2.getColors(x, y, colors2);
53 distance += distance(image1.getSupported(), colors1, image2.getSupported(), colors2) / totalPixels;
54 }
55 }
56 return distance < getThreshold();
57 }
58
59 public static final Raster.Component[] DISTANCE_COMPONENTS = {
60 Raster.Component.RED, Raster.Component.BLUE, Raster.Component.GREEN
61 };
62
63 static double distance(Raster.Component[] comps1, double[] colors1, Raster.Component[] comps2, double[] colors2) {
64 double res = 0;
65 double diff;
66 for (Raster.Component c : DISTANCE_COMPONENTS) {
67 diff = colors2[PixelImageComparator.arrayIndexOf(comps2, c)] -
68 colors1[PixelImageComparator.arrayIndexOf(comps1, c)];
69 res += diff * diff;
70 }
71 return Math.sqrt(res);
72 }
73
74 public String getID() {
75 return AverageDistanceComparator.class.getName() + ":" + getThreshold();
76 }
77 }
|