Я хочу сравнить два изображения побайтно.Оба они являются 8-битными BMP-изображениями и имеют размер 40000 байт.Первое изображение генерируется в памяти как массив байтов, второе считывается из файла в объект Image.
Я использую MemoryStream
экземпляров для сравнения:
byte[] generatedImage = new byte[40000];
// some unrelated logic of image generation ...
MemoryStream imageStream1 = new MemoryStream(generatedImage);
// loaded image, 200x200 bmp - 40000 bytes
MemoryStream imageStream2 = new MemoryStream();
Image loadedImage = Image.FromFile("image.bmp");
loadedImage.Save(imageStream2, ImageFormat.Bmp);
Проблема в том, что поток памяти загруженного изображения imageStream2
содержит больше , чем 40000 байт, насколько я понимаю, он также содержит некоторую информацию о самом BMP.Таким образом, второй поток создается с Length
, равным 41078 и Position
, равным 1278. Я бы понял, если бы Position
был 1078, но это не так, и с позиции осталось менее 40000 байтов.
В моем алгоритме мне нужно сравнивать изображения как можно быстрее, поэтому я отказался от идеи создания растровых изображений и сравнения с помощью метода GetPixel
.Для сравнения я использую MemoryStream.ReadByte
метод.
Как я могу получить "настоящие" байты BMP со второго Stream
?Можно ли в этом случае сравнивать изображения на байтовой основе?