ДокументацияQImage выравнивани данных
QImage::QImage(uchar *data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void *cleanupInfo = Q_NULLPTR)
описывает, что данные, refered параметром «данных», должны быть выровнены 32 бит. http://doc.qt.io/qt-5/qimage.html#QImage-3 Но это, по крайней мере, неясно, что именно имеется в виду. Я предполагаю, что каждый пиксель занимает 32 бита. Но это не тот случай. Построение такого изображения работает:
uint8_t* rgb = new uint8_t[3 * height * width];
QImage Img(rgb, width, height, QImage::Format_RGB888);
Но это сбивает с толку. Когда я хочу, чтобы получить значение пикселей изображения, я думал, что мне нужно сделать это (так как данные 32 бит выравниваются и QRgb 32 бит):
QRgb*rawPixelData = (QRgb*) Img.bits();
for(uint32_t i = 0; i < (Img.width * Img.height); ++i)
{
qDebug() << "Red" << qRed(rawPixelData[i]);
qDebug() << "Green" << qGreen(rawPixelData[i]);
qDebug() << "Blue" << qBlue(rawPixelData[i]);
}
Но это не работает (приводит к авария). Итак, я полагаю, данные не выровнены по 32 бита. Итак, данные не совпадают с 32-разрядными данными, или я понимаю что-то неправильно?