compareImages function
Compares a and b pixel by pixel. A pixel differs when any channel is
more than tolerance apart.
Implementation
ImageDiff compareImages(RgbaPixels a, RgbaPixels b, {int tolerance = 2}) {
if (a.width != b.width || a.height != b.height) {
throw ArgumentError(
'Images differ in size: ${a.width}x${a.height} vs ${b.width}x${b.height}',
);
}
var maxDelta = 0;
var differing = 0;
for (var p = 0; p < a.bytes.length; p += 4) {
var pixelDelta = 0;
for (var c = 0; c < 4; c++) {
final d = (a.bytes[p + c] - b.bytes[p + c]).abs();
if (d > pixelDelta) pixelDelta = d;
}
if (pixelDelta > maxDelta) maxDelta = pixelDelta;
if (pixelDelta > tolerance) differing++;
}
return ImageDiff._(maxDelta, differing);
}