функция скана в классе qimage - PullRequest
0 голосов
/ 03 декабря 2011

Я занимаюсь разработкой приложения для редактирования растровой графики.В этом приложении я должен создать функцию scanline, которая будет делать то же самое, что и функция scanline в классе QImage.Но меня мало смущает то, как работает функция scanline и вообще как scanline.Например, когда я вызываю bytesPerLine () для изображения, высота которого составляет 177 пикселей, я ожидал, что значение будет 531 (3 байта для каждого пикселя), но эта функция возвращает 520?

Кроме того, когда я использую uchar data = image->scanLine(y)[x] для R = 249 G = 249 B = 249, значение в переменных данных равно 255. Я действительно не понимаю этого значения.Заранее спасибо:)

1 Ответ

1 голос
/ 03 декабря 2011

Для надежного поведения вы должны проверить возвращаемое значение QImage::format(), чтобы увидеть, какой базовый формат используется перед доступом к необработанным данным изображения.

Кажется, Qt предпочитает формат RGB32 / ARGB32 для true-цветы, где каждый пиксель занимает 4 байта, независимо от того, существует альфа-канал или нет (для формата RGB32 он просто заполнен 0xff).Если вы загружаете изображение в истинном цвете, оно, вероятно, имеет один из этих двух форматов.

Кроме того, порядок байтов может быть разным на разных платформах, используйте QRgb для доступа к 32-битным пикселям, когда это возможно.

Кстати, разве линия сканирования не должна быть горизонтальной?Я думаю, что вы должны использовать width() вместо height() для расчета длины линии сканирования.

...