【发布时间】:2016-12-20 01:56:40
【问题描述】:
文档
QImage::QImage(uchar *data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void *cleanupInfo = Q_NULLPTR)
说明参数“data”引用的数据必须是 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 位对齐的,还是我理解错了?
【问题讨论】: