Qt & Kinect: как преобразовать BYTE * pBuffer в QByteArray или const uchar*?


В настоящее время я объединяю библиотеку Qt с API Kinect и пытаюсь показать видео с сенсора в QImage (показываемом QLabel).

В моей библиотеке обработки Kinect функция, которая получает данные от видеосенсора, выдает данные в виде байта* (указывая на что-то со значениями RGB32).

В другом маленьком углу моей программы у меня есть слот, принимающий этот байт* и пытающийся обновить QImage с данными RGB32 как образом:

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

Где pBuffer передается в слот сигналом, и является вышеупомянутым байтом*.

Это не работает для меня, и я все еще застрял с серой коробкой, где должно быть изображение. Я предполагаю, что проблема заключается в приведении, потому что я исследовал тип данных и, по-видимому, QImage::Format_RGB32 является правильным.

Как мне поступить с этим? :)

1 2

1 ответ:

loadFromData ожидает, что буфер, который вы передаете, будет содержать всю необходимую информацию об изображении...включая его ширину и высоту. Поэтому формат должен быть таким, как JPEG или PNG, а не константой QImage::Format.

На самом деле, я удивлен, что строка составлена так, как написано...потому что loadFromData ожидает символ* для спецификации "формата", и вы передаете целое число:

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...