Możesz porównać pliki (zakładając, że rozmiar się nie zmienił) w następujący sposób:
a) porównujesz właściwości Width
i Height
. Jeżeli nie są równe porównywanej Bitmapie zwracasz false
b) porównujesz losowe 20 pikseli. Jeżeli kolor nie jest taki sam zwracasz false
c) porównujesz cały plik spełniający punkt a i b.
Pewnie są lepsze sposoby ale ja daję tylko przykład który mi wpadł do głowy :)
Z tego co udało mi się wyczytać w google pomoże na pewno:
-
https://morzel.net/post/Szybkie-operacje-pikselowe-w-NET-(z-i-bez-unsafe)
Na podstawie tego linku pomyślałem nad wczytywaniem jednego koloru a resztę pokrycie maską np. RGB(0,0,0). Wtedy można przeprowadzić łatwą detekcję jednego koloru w obu bitmapach.
-
https://en.morzel.net/post/detecting-a-drone-opencv-in-dotnet-for-beginners-emgu-cv-3-visual-studio-2017-part-1
Tutaj jest biblioteka dot. przetwarzania obrazu. Możesz o niej poczytać i daj znać jak coś ciekawego znajdziesz :)
-
Tutaj znalazłem kod wczytujący dwie bitmapy jako tablice bajtów oraz porównujący je. Nie testowałem
https://stackoverrun.com/pl/q/4406732
public static class Ext
{
public static byte[] GetBytes(this Bitmap bitmap)
{
var bytes = new byte[bitmap.Height * bitmap.Width * 3];
BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
Marshal.Copy(bitmapData.Scan0, bytes, 0, bytes.Length);
bitmap.UnlockBits(bitmapData);
return bytes;
}
}
var bitmap = new Bitmap(@"C:\myimg.jpg");
var bitmap1 = new Bitmap(@"C:\myimg.jpg");
var bytes = bitmap.GetBytes();
var bytes1 = bitmap1.GetBytes();
//true
var sequenceEqual = bytes.SequenceEqual(bytes1);