package ru.yandex.qatools.ashot.comparison; import java.awt.image.BufferedImage; /** * @author Rovniakov Viacheslav rovner@yandex-team.ru * */ public class ImageMarkupPolicy extends DiffMarkupPolicy { private int diffPointCount; private int xReference = Integer.MAX_VALUE; private int yReference = Integer.MAX_VALUE; private int xSum; private int ySum; private BufferedImage transparentDiffImage; @Override public void setDiffImage(BufferedImage diffImage) { super.setDiffImage(diffImage); transparentDiffImage = getTransparentDiffImage(diffImage); } @Override public BufferedImage getMarkedImage() { if (!marked) { final int rgb = diffColor.getRGB(); for (int x = 0; x < diffImage.getWidth(); x++) { for (int y = 0; y < diffImage.getHeight(); y++) { if (transparentDiffImage.getRGB(x, y) == rgb) { diffImage.setRGB(x, y, rgb); } } } marked = true; } return diffImage; } @Override public BufferedImage getTransparentMarkedImage() { return transparentDiffImage; } @Override public void addDiffPoint(int x, int y) { diffPointCount++; xReference = Math.min(xReference, x); yReference = Math.min(yReference, y); xSum += x; ySum += y; transparentDiffImage.setRGB(x, y, diffColor.getRGB()); } @Override public boolean equals(Object obj) { if (obj instanceof ImageMarkupPolicy) { ImageMarkupPolicy item = (ImageMarkupPolicy) obj; return this.diffPointCount == item.diffPointCount && this.xSum - this.diffPointCount * this.xReference == item.xSum - item.diffPointCount * item.xReference && this.ySum - this.diffPointCount * this.yReference == item.ySum - item.diffPointCount * item.yReference; } return false; } @Override public int hashCode() { int result = diffPointCount; result = 31 * result + xSum - diffPointCount * xReference; result = 31 * result + ySum - diffPointCount * yReference; return result; } @Override public boolean hasDiff() { return diffPointCount > diffSizeTrigger; } @Override public int getDiffSize() { return diffPointCount; } }