compareImages function

ImageDiff compareImages(
  1. RgbaPixels a,
  2. RgbaPixels b, {
  3. int tolerance = 2,
})

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);
}