Qt & Kinect: Как мне преобразовать BYTE * pBuffer в QByteArray или const uchar *? - PullRequest
2 голосов
/ 23 декабря 2011

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

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

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

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

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

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

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

1 Ответ

2 голосов
/ 23 декабря 2011

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 значения ...

...