Qt
September 25, 2024
QImage. Как с высокой скоростью отображать массивы данных с помощью Qt на примере водопада
Telegram Teletype vc.ru dzen.ru
В классе QWidgetExample, наследнике от QWidget переопределяем paintEvent.
Предварительно нужно в соответствии с вашими целями подготовить массив buf.
Либо сразу преобразовав цвета перед формированием массива, либо через setColorTable.
В случае водопада предварительно данные нормализуем, например через ippsNormalize_32f и конвертируем в формат 8u (0...255).
При добавлении в водопад нового пакета данных переносим весь массив:
ippsCopy_32f(&buf1[0], &buf2[width], width * (height - 1)); // сдвиг ippsCopy_32f(&buf1[0], &buf2[0], width); // добавление новых данных
QImage image1; // объект QImage, содержащий изображение массива buf quint8* buf; // массив данных для отображения 8u (0...255) 4 канала в формате RGB 0xFFRRGGBB // размеры водопада int width; int height; protected: void paintEvent(QPaintEvent *event); void QWidgetExample::paintEvent(QPaintEvent * ) { QPainter pnt(this); image1 = QImage(buf, width, height, QImage::Format_RGB32); // в случае пользовательской шкалы цветов // QVector<QRgb> color_table; // TODO тут надо заполнить color_table // image1 = QImage(buf, width, height, QImage::Format_Indexed8); // image1.setColorTable() pnt.drawImage(0, 0, buf); }