package ru.yandex.qatools.ashot.comparison; import java.awt.image.BufferedImage; /** * @author <a href="pazone@yandex-team.ru">Pavel Zorin</a> */ public class ImageDiff { @SuppressWarnings("UnusedDeclaration") public static final ImageDiff EMPTY_DIFF = new ImageDiff(); private DiffMarkupPolicy diffMarkupPolicy; public ImageDiff(DiffMarkupPolicy diffMarkupPolicy) { this.diffMarkupPolicy = diffMarkupPolicy; } private ImageDiff() { diffMarkupPolicy = new PointsMarkupPolicy(); } /** * Sets the maximum number of distinguished pixels when images are still considered the same. * * @param diffSizeTrigger the number of different pixels * @return self for fluent style */ public ImageDiff withDiffSizeTrigger(final int diffSizeTrigger) { this.diffMarkupPolicy.setDiffSizeTrigger(diffSizeTrigger); return this; } /** * @return Diff image with empty spaces in diff areas. */ public BufferedImage getDiffImage() { return diffMarkupPolicy.getDiffImage(); } /** * Sets Diff image. * @param image Image diff */ public void setDiffImage(BufferedImage image) { diffMarkupPolicy.setDiffImage(image); } public void addDiffPoint(int x, int y) { diffMarkupPolicy.addDiffPoint(x, y); } /** * Marks diff on inner image and returns it. * Idempotent. * * @return marked diff image */ public BufferedImage getMarkedImage() { return diffMarkupPolicy.getMarkedImage(); } /** * Marks diff points on transparent canvas and returns it. * Idempotent. * * @return marked diff image */ public BufferedImage getTransparentMarkedImage() { return diffMarkupPolicy.getTransparentMarkedImage(); } /** * Returns <tt>true</tt> if there are differences between images. * * @return <tt>true</tt> if there are differences between images. */ public boolean hasDiff() { return diffMarkupPolicy.hasDiff(); } /** * Returns number of points that differ. * * @return int - number of points that differ. */ public int getDiffSize() { return diffMarkupPolicy.getDiffSize(); } @Override public boolean equals(Object obj) { if (obj instanceof ImageDiff) { ImageDiff item = (ImageDiff) obj; return this.diffMarkupPolicy.equals(item.diffMarkupPolicy); } return false; } @Override public int hashCode() { return this.diffMarkupPolicy.hashCode(); } }