public static void VerifySimilarity <TPixelA, TPixelB>( this ImageComparer comparer, Image <TPixelA> expected, Image <TPixelB> actual) where TPixelA : unmanaged, IPixel <TPixelA> where TPixelB : unmanaged, IPixel <TPixelB> { if (expected.Size() != actual.Size()) { throw new ImageDimensionsMismatchException(expected.Size(), actual.Size()); } if (expected.Frames.Count != actual.Frames.Count) { throw new ImagesSimilarityException("Image frame count does not match!"); } ImageSimilarityReport report = comparer.CompareImages(expected, actual); if ((report.TotalNormalizedDifference ?? 0F) != 0F) { throw new ImagesSimilarityException(report.ToString()); } }
public static void VerifySimilarityIgnoreRegion <TPixelA, TPixelB>( this ImageComparer comparer, Image <TPixelA> expected, Image <TPixelB> actual, Rectangle ignoredRegion) where TPixelA : unmanaged, IPixel <TPixelA> where TPixelB : unmanaged, IPixel <TPixelB> { if (expected.Size() != actual.Size()) { throw new ImageDimensionsMismatchException(expected.Size(), actual.Size()); } if (expected.Frames.Count != actual.Frames.Count) { throw new ImagesSimilarityException("Image frame count does not match!"); } ImageSimilarityReport report = comparer.CompareImages(expected, actual); if ((report.TotalNormalizedDifference ?? 0F) != 0F) { IEnumerable <PixelDifference> outsideChanges = report.Differences.Where( x => !(ignoredRegion.X <= x.Position.X && x.Position.X <= ignoredRegion.Right && ignoredRegion.Y <= x.Position.Y && x.Position.Y <= ignoredRegion.Bottom)); if (outsideChanges.Any()) { var cleanedReport = new ImageSimilarityReport <TPixelA, TPixelB>(expected, actual, outsideChanges, null); throw new ImagesSimilarityException(cleanedReport.ToString()); } } }
public static ImageSimilarityReport <TPixelA, TPixelB> CompareImages <TPixelA, TPixelB>( this ImageComparer comparer, Image <TPixelA> expected, Image <TPixelB> actual) where TPixelA : unmanaged, IPixel <TPixelA> where TPixelB : unmanaged, IPixel <TPixelB> => comparer.CompareImages(expected, actual);