2016-03-21 12 views
0

ROSトピックのサブスクリプションを通じて配信される "rgb8"フォーマットのmsgがあります。 QImageを作成してqml Imageに画像を表示させるにはどうすればいいですか? 現在、次のコードスニペットを作成しています。ROS QImageの画像フォーマットの互換性

QImage *VideoPlayer::Mat2QImage(cv::Mat const& src) 
{ 
    QImage *imgPtr = new QImage((const uchar *) src.data, 
       src.cols, src.rows, src.step, QImage::Format_RGB888); 
    imgPtr->bits(); 
    return imgPtr; 
} 

void VideoPlayer::imageCallback(const sensor_msgs::ImageConstPtr& msg) 
{ 
    static int count = 0; 
    try 
    { 
    try { 
     Mat imgMat = cv_bridge::toCvShare(msg, "rgb8")->image; 

     delete imgProvider->currentShot; 
     imgProvider->currentShot = Mat2QImage(imgMat); 
    ... 
} 

(* currentShot)は、qml側の 'source'プロパティからimageRequest(...)メソッドによって取り除かれます。

答えて

0

QQuickImageProviderを参照してください。 QQuickImageProviderを継承し、requestImage()またはrequestPixmap()を実装するQ ROSImageProviderクラスを作成し、QMLEngineに登録:

engine->addImageProvider(QLatin1String("ros"), new ROSImageProvider); 

そして、あなたは画像を取得するには、次のQMLの構文を使用してすることができます

Image { source: "ros://some_id" } 

完全な例は、Qtのドキュメントを参照してください。

+0

ありがとうございますが、私のqmlは、必要に応じてrequestImage()メソッドを呼び出しています。問題はqml Imageが送信されたイメージを表示していないことです(私は推測します)。だから、私はイメージのエンコーディング形式などについて無知だと思う。 qmlファイルで私はこのセクションを持っています: "Image {... source:" image:// images/"+ imageSN ...}" –

+0

1. QImageをファイルに保存しようとしましたか? 2.デバッグメッセージにエラーメッセージはありますか? – diro

+0

実際、私はちょうどそれをやった。それはpngファイルを正しく保存します。これは "imgProvider-> currentShot-> save(" delta.png ");"によって行われます。 - このコマンド。ここで、currentShotはQImageへのポインタです。 –

関連する問題