簡體   English   中英

Qml視頻創建來自C ++的圖像流

[英]Qml Video creation out of image stream from C++

經過10天的努力,我回到了對我的任務提出一個基本問題。

我有一個三層結構。

T1。 一個名為“MPC”的ROS項目,它連續發布主題“video_image”幀(例如每秒30幀視頻圖像)。

T2。 作為Qt5.5項目開發的C ++程序 - 一種中間工作者。

T3。 Qml UI上的圖像類型對象(Qt5.5 Quick)。

我想在MPA(T1)的幀中顯示T3 UI上的視頻片段。 到目前為止,我可以肯定的是從T1中創建QImages,我可以在PWD上創建臨時圖像文件(例如,currentFrame.jpg)。

我應該怎么做才能將幀流作為UI視頻播放器的源(也就是說,到目前為止,我仍然認為圖像類型是視頻播放器UI候選者。)

我是否正在尋求解決方案? 從這些圖片幀流創建視頻查看器源的可行方法是什么?

這可以通過使用QQuickPaintedItem來完成。

在C ++ Qt部分,你需要有一個繼承QQuickPaintedItem的類:

//imagewriter.h

class imagewriter : public QQuickPaintedItem
{
    Q_OBJECT

public:
    imagewriter(QQuickItem *parent = 0);

    void paint(QPainter *painter);
    //the paint method is already implemented in QQuickPaintedItem
    //you just override it

    QImage image; //your image

};

// imagewriter.cpp

imagewriter::imagewriter(QQuickItem *parent): QQuickPaintedItem(parent)
{

}

void imagewriter::paint(QPainter *painter)
{
    painter->drawImage(QPoint(0,0),this->image);
    //this will simply draw the image in your qml UI !
}

現在您只需要注冊此對象,以便能夠在qml文件中使用它:

//在主.cpp中:

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    qmlRegisterType<imagewriter>("mr.jb",1,0,"my_video_image");

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}

// main.qml:

import mr.jb 1.0
ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")


my_video_image {
            id : my_img_strm1
            anchors.centerin : parent
        }
}

my_video_image對象應該能夠顯示你的qimage,你需要做的就是不斷更新那個圖像到你從ROS流中獲得的最后一個圖像,每次你調用預定義的update(); 方法是為了自動重新觸發paint方法,該方法負責在qml世界中繪制圖像。 我想你沒有T1部分的問題。

在T2(C ++類)中接收和構建映像可以通過多種方式完成(例如,QUdp)。

最后一部分(T3)在上面的代碼中描述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM