package ru.yandex.qatools.ashot.util;
import ru.yandex.qatools.ashot.Screenshot;
import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
/**
* @author <a href="frolic@yandex-team.ru">Viacheslav Frolov</a>
*/
public final class ImageBytesDiffer {
private ImageBytesDiffer() {
throw new UnsupportedOperationException();
}
public static boolean areImagesEqual(Screenshot expected, Screenshot actual) {
return areImagesEqual(expected.getImage(), actual.getImage());
}
public static boolean areImagesEqual(BufferedImage expected, BufferedImage actual) {
return expected.getHeight() == actual.getHeight() &&
expected.getWidth() == actual.getWidth() &&
actual.getColorModel().equals(expected.getColorModel()) &&
areImagesBuffersEqual(expected.getRaster().getDataBuffer(), actual.getRaster().getDataBuffer());
}
private static boolean areImagesBuffersEqual(DataBuffer expected, DataBuffer actual) {
return actual.getDataType() == expected.getDataType() &&
actual.getNumBanks() == expected.getNumBanks() &&
actual.getSize() == expected.getSize() &&
areImagesBytesEqual(actual, expected);
}
private static boolean areImagesBytesEqual(DataBuffer expected, DataBuffer actual) {
for (int bank = 0; bank < expected.getNumBanks(); bank++) {
for (int i = 0; i < expected.getSize(); i++) {
if (expected.getElem(bank, i) != actual.getElem(bank, i)) {
return false;
}
}
}
return true;
}
}