Мне кажется, я вижу, что здесь происходит.
Ваше изображение имеет 8-битную шкалу серого с шириной 127 пикселей. Все эти индексы, где встречаются различия, кратны 128 (минус 1, , т.е. последний столбец в 128-байтовой строке). Поскольку вы получили необработанные биты изображения, наиболее вероятно, что данные строк в изображении выровнены (обычно 2 или 4 байта).
Qt, вероятно, ничего не записывает в эти байты заполнения, так как они не считаются частью изображения. Таким образом, вы действительно видите неопределенное поведение, поскольку ваша программа не может гарантировать повторяющиеся результаты (загрузка данных из неинициализированной области памяти).
Чтобы правильно сравнить данные изображения, вам нужно пропустить любые байты заполнения. Это означает, что вам нужно знать сумму заполнения. Учитывая богатство библиотеки Qt, я уверен, что будет какой-то способ получить или вывести эту информацию.
[Редактировать] Я быстро посмотрел ссылку на QImage, и действительно я вижу, что строки развертки 32-битные выровнены. Самый простой способ выполнить сравнение - это вызвать QImage::bytesPerLine()
, чтобы определить, сколько байтов нужно сравнить для каждой строки развертки, а затем получить каждую строку развертки отдельно с помощью QImage::scanLine(int)
.