package ru.yandex.qatools.ashot.comparison;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.IndexColorModel;
import static java.awt.image.BufferedImage.TYPE_BYTE_INDEXED;
/**
* @author Rovniakov Viacheslav rovner@yandex-team.ru
*/
public abstract class DiffMarkupPolicy {
private static final int BITS_PER_PIXEL = 8;
private static final int COLOR_MAP_SIZE = 2;
private static final int TRANSPARENT_COLOR_INDEX = 0;
protected boolean marked = false;
protected int diffSizeTrigger;
protected BufferedImage diffImage;
protected Color diffColor = Color.RED;
public DiffMarkupPolicy withDiffColor(final Color diffColor) {
this.diffColor = diffColor;
return this;
}
public abstract BufferedImage getMarkedImage();
public abstract BufferedImage getTransparentMarkedImage();
public abstract void addDiffPoint(int x, int y);
@Override
public abstract boolean equals(Object obj);
@Override
public abstract int hashCode();
public abstract boolean hasDiff();
public abstract int getDiffSize();
public void setDiffImage(BufferedImage diffImage) {
this.diffImage = diffImage;
}
public void setDiffSizeTrigger(final int diffSizeTrigger) {
this.diffSizeTrigger = diffSizeTrigger;
}
public BufferedImage getDiffImage() {
return diffImage;
}
private IndexColorModel getColorModel() {
return new IndexColorModel(BITS_PER_PIXEL, COLOR_MAP_SIZE, getColorMap(), 0, false, TRANSPARENT_COLOR_INDEX);
}
private byte[] getColorMap() {
Color negativeColor = new Color(0xFFFFFF - diffColor.getRGB()); //negate diff color
return new byte[]{
(byte) negativeColor.getRed(),
(byte) negativeColor.getGreen(),
(byte) negativeColor.getBlue(),
(byte) diffColor.getRed(),
(byte) diffColor.getGreen(),
(byte) diffColor.getBlue()
};
}
protected BufferedImage getTransparentDiffImage(BufferedImage diffImage) {
return new BufferedImage(diffImage.getWidth(), diffImage.getHeight(), TYPE_BYTE_INDEXED, getColorModel());
}
}