-
-
Notifications
You must be signed in to change notification settings - Fork 887
Description
Description
I'm writing a small tool that compares images after doing lossless optimizations on them using another tool: https://encode.ru/threads/1589-FileOptimizer
I took a picture with my own Camera (6000x4000) and ran it through the FileOptimizer. After that I used the tool I created to compare the source and target image to see if there were any pixel differences. The comparison failed on pixel X: 5990 Y: 3992
For image1 the debugger shows: 36, 15, 10, 255 (RGBA)
For image2 the debugger shows: 36, 15, 12, 255 (RGBA)
The strange this is, if I open the same images in Paint.NET the pixel value is: 38, 14, 12, 255 (RGBA). (And it's the same for both images).
I also tested what the pixel value would be of the images saved as BMP. In Paint.NET they read again as the same values we saw before:
- Image1: 36, 15, 10, 255 (RGBA)
- Image2: 36, 15, 12, 255 (RGBA)
Steps to Reproduce
Images that should be equal:
SourceImagesThatShouldBeEqual.zip
Code I'm using to reproduce the bug:
private static bool AreImagesEqual(string image1Path, string image2Path)
{
var w = Stopwatch.StartNew();
var image1 = Image.Load(image1Path);
var image2 = Image.Load(image2Path);
if (image1.Width != image2.Width || image1.Height != image2.Height)
{
return false;
}
int width = image1.Width;
int height = image1.Height;
using (var fs = new FileStream("image1.bmp", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
{
image1.SaveAsBmp(fs);
}
using (var fs = new FileStream("image2.bmp", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
{
image2.SaveAsBmp(fs);
}
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
var pixel1 = image1.Pixels[y * width + x];
var pixel2 = image2.Pixels[y * width + x];
if (pixel1 != pixel2)
{
if (pixel1.A == 0 && pixel2.A == 0)
{
//Optimization that happens to better be able to compress png's sometimes
//Fully transparent pixel so the pixel is still the same no matter what the RGB values
}
else
{
Console.WriteLine($"Failed, elapsed time: {w.Elapsed}");
return false;
}
}
}
}
Console.WriteLine($"Elapsed time: {w.Elapsed}");
return true;
}
System Configuration
- ImageSharp version: Did a clone today at 06-06-2017
- Other ImageSharp packages and versions:
- Environment (Operating system, version and so on): Windows 10 with a WPF app using the ImageSharp library
- .NET Framework version: 4.6.2 using ImageSharp as a reference
- Additional information: -
