2

我目前正在将 Qt 库与 Kinect API 结合起来,并尝试在 QImage 中显示来自传感器的视频(由 QLabel 显示)。

在我的 Kinect 处理库中,从视频传感器接收数据的函数将数据作为 BYTE* 发出(指向具有 RGB32 值的东西)。

在我程序的另一个小角落,我有一个插槽接收该 BYTE* 并尝试使用 RGB32 数据更新 QImage,如下所示:

videoCanvas->loadFromData(reinterpret_cast<const uchar*>(pBuffer), QImage::Format_RGB32);

其中 pBuffer 是由信号传入槽的,就是前面提到的 BYTE*。

这对我不起作用,我仍然被图像应该在的灰色框所困扰。我想问题出在铸造上,因为我研究了数据类型,显然 QImage::Format_RGB32 是正确的。

我应该如何处理这个?:)

4

1 回答 1

2

loadFromData期望您传递的缓冲区包含有关图像的所有必要信息......包括它的宽度和高度。所以格式应该是JPEG或PNG之类的东西,而不是QImage::Format常数。

事实上,我很惊讶该行编译为书面......因为loadFromData它需要一个 char* 作为“格式”的规范,并且您正在传递一个整数:

http://developer.qt.nokia.com/doc/qt-4.8/qimage.html#Format-enum

如果您拥有的是数据的原始字节数组,并且知道来自其他来源的宽度和高度,您可能希望为此使用适当的 QImage 构造函数:

http://developer.qt.nokia.com/doc/qt-4.8/qimage.html#QImage-5

那就是您使用这些QImage::Format值的地方...

于 2011-12-23T02:39:54.763 回答