Как распечатать все необработанные данные QImage для сравнения в памяти?

У меня есть два объекта QImage, которые должны быть равны, но результатом QImage::operator== является false. Поэтому я хочу распечатать все необработанные данные двух объектов для сравнения. Как это сделать? Можно ли это сделать с помощью qDebug()?


person UniversE    schedule 19.08.2013    source источник
comment
Я рекомендую вам сохранить изображения на диск и сравнить их.   -  person Didac Perez Parera    schedule 19.08.2013


Ответы (3)


Если вы хотите распечатать значения каждого пикселя, используйте метод bits() QImage, чтобы получить указатель на все значения пикселей в беззнаковом символе и просто напечатать их в цикле for. Например, если у вас есть 32-битные изображения, то в таблице, возвращаемой bits(), у вас будет 4 значения для каждого пикселя (красный, зеленый, синий, альфа), и чтобы узнать, сколько из них у вас есть, просто используйте width()*height ()*4 (если это 32-битная глубина). Или вы можете сравнить каждый пиксель вместо печати и вернуть только те, которые отличаются.

person jantar    schedule 19.08.2013
comment
Ничего, кроме значений пикселей, не используется для сравнения? Я проверил источник. но не уверен. - person UniversE; 19.08.2013

Я предлагаю вам написать функцию для сравнения двух изображений, байт за байтом, и возвращать смещение, где они отличаются.

Сравнение данных изображения вручную часто утомительно и может привести к ошибкам.

person Thomas Matthews    schedule 19.08.2013
comment
Спасибо за предложение :) - person UniversE; 19.08.2013

Использование qDebug() << QImage() напечатает что-то вроде QImage(QSize(0, 0) ).

Можно использовать функцию const uchar * QImage::constBits() для указатель на данные первого пикселя, а затем перебрать данные пикселя, печатая значения.

person SingerOfTheFall    schedule 19.08.2013
comment
Ничего, кроме значений пикселей, не используется для сравнения? Я проверил источник. но не уверен. - person UniversE; 19.08.2013
comment
Я думаю, что он сначала сравнивает всю информацию, например, формат изображения, и только затем, если она совпадает, он проверяет пиксели. Если работает быстро, значит не проверял пиксели :). - person jantar; 19.08.2013