2016-03-21 11 views
0

arasındaki resim biçimi uyumluluğu ROS konu aboneliği aracılığıyla "rgb8" biçim msg mesajım var. Bir QImage'ı nasıl oluşturabilir ve qml Image'in resmi nasıl görüntüleyebilir? Şu anda aşağıdaki kod parçacığı üzerinde çalışıyorum.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) imageRequest (...) QML tarafının 'kaynak' özelliğinden yöntemle fecthed edilir.

cevap

0

QQuickImageProvider'a başvurmalısınız. QQuickImageProvider miras q ROSImageProvider sınıf oluşturun ve requestImage() veya requestPixmap() uygulamak ve sonra QMLEngine bunu kayıt:

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

Ve sonra görüntü elde etmek için aşağıdaki QML sözdizimi kullanarak yapabilirsiniz:

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

Tam örnek için Qt belgelerine başvurabilirsiniz.

+0

Teşekkürler, ancak qml zaten ihtiyaca göre requestImage() yöntemini çağırıyor. Sorun qml Görüntü iletilen görüntüyü göstermiyor (sanırım). Yani, ben görüntü kodlama formatı veya bir şey üzerinde cahil değilim düşünüyorum. Qml dosyasında bu bölüme sahibim: "Image {... source:" image: // images/"+ imageSN ...}" –

+0

1. QImage'ı dosyaya kaydetmeyi ve doğrulamayı denediniz mi? 2. Hata ayıklama mesajında ​​herhangi bir hata mesajı var mı? – diro

+0

Aslında, daha yeni yaptım. Png dosyasını doğru şekilde kaydeder. "ImgProvider-> currentShot-> save (" delta.png ") ile yapılır;" - bu komut. Burada, currentShot bir QImage için bir işaretçidir. –

İlgili konular