У меня есть два объекта QImage, которые должны быть равны, но результатом QImage::operator==
является false
. Поэтому я хочу распечатать все необработанные данные двух объектов для сравнения. Как это сделать? Можно ли это сделать с помощью qDebug()?
Как распечатать все необработанные данные QImage для сравнения в памяти?
Ответы (3)
Если вы хотите распечатать значения каждого пикселя, используйте метод bits() QImage, чтобы получить указатель на все значения пикселей в беззнаковом символе и просто напечатать их в цикле for. Например, если у вас есть 32-битные изображения, то в таблице, возвращаемой bits(), у вас будет 4 значения для каждого пикселя (красный, зеленый, синий, альфа), и чтобы узнать, сколько из них у вас есть, просто используйте width()*height ()*4 (если это 32-битная глубина). Или вы можете сравнить каждый пиксель вместо печати и вернуть только те, которые отличаются.
Я предлагаю вам написать функцию для сравнения двух изображений, байт за байтом, и возвращать смещение, где они отличаются.
Сравнение данных изображения вручную часто утомительно и может привести к ошибкам.
Использование qDebug() << QImage()
напечатает что-то вроде QImage(QSize(0, 0) )
.
Можно использовать функцию const uchar * QImage::constBits()
для указатель на данные первого пикселя, а затем перебрать данные пикселя, печатая значения.