Compares images
Inspired by the image compare feature "Visual verification API" of TestApi this code supports comparing images by using a tolerance mask image. That tolerance mask image is a valid image by itself and can be manipulated.
SkiaSharpCompare focus on os agnostic support and therefore depends on SkiaSharp.
boolisEqual=Compare.ImagesAreEqual("actual.png","expected.png");varcalcDiff=Compare.CalcDiff("2x2PixelBlack.png","2x2PixelWhite.png");Console.WriteLine($"PixelErrorCount: {calcDiff.PixelErrorCount}");Console.WriteLine($"PixelErrorPercentage: {calcDiff.PixelErrorPercentage}");Console.WriteLine($"AbsoluteError: {calcDiff.AbsoluteError}");Console.WriteLine($"MeanError: {calcDiff.MeanError}");// PixelErrorCount: 4// PixelErrorPercentage: 100// AbsoluteError: 3060// MeanError: 765Imagine two images you want to compare, and want to accept the found difference as at state of allowed difference.
Using CalcDiffMaskImage you can calc a diff mask from actual and reference image
Example - Create difference image
using(varfileStreamDifferenceMask=File.Create("differenceMask.png"))using(varmaskImage=SkiaSharpCompare.CalcDiffMaskImage(pathPic1,pathPic2))varencodedData=maskImage.Encode(SKEncodedImageFormat.Png,100);encodedData.SaveTo(fileStreamDifferenceMask);Example - Compare two images using the created difference image. Add white pixels to differenceMask.png where you want to allow difference.
varmaskedDiff=SkiaSharpCompare.CalcDiff(pathPic1,pathPic2,"differenceMask.png");Assert.That(maskedDiff.AbsoluteError,Is.EqualTo(0));varcomparer=newImageCompare(ResizeOption.Resize,TransparencyOptions.CompareAlphaChannel,pixelColorShiftTolerance:5,compareMetadata:true);varcalcDiff=comparer.CalcDiff("pngPartialTransparent4x4Pixel.png","2x2PixelWhite.png");// Displaying the differencesConsole.WriteLine($"PixelErrorCount: {calcDiff.PixelErrorCount}");Console.WriteLine($"PixelErrorPercentage: {calcDiff.PixelErrorPercentage}");Console.WriteLine($"AbsoluteError: {calcDiff.AbsoluteError}");Console.WriteLine($"MeanError: {calcDiff.MeanError}");foreach(varmetadataDifferenceincalcDiff.MetadataDifferences)Console.WriteLine($"Metadata Difference: {metadataDifference}");// PixelErrorCount: 16// PixelErrorPercentage: 100// AbsoluteError: 14272// MeanError: 892// Metadata Difference: [File:File Name, (pngPartialTransparent4x4Pixel.png, 2x2PixelWhite.png)]// Metadata Difference: [File:File Size, (688 bytes, 556 bytes)]// Metadata Difference: [PNG-IHDR:Color Type, (True Color with Alpha, True Color)]// Metadata Difference: [PNG-IHDR:Image Height, (4, 2)]// Metadata Difference: [PNG-IHDR:Image Width, (4, 2)]// Metadata Difference: [PNG-tEXt:Textual Data, (Software: Paint.NET 5.1.2, Comment: Created with GIMP)]// ...

