[eVision + Qt] Comment convertir une EImage en QImage et l'afficher dans un QWidget?
Bonjour à tous,
Je travaille sur un projet d'acquisition vidéo avec une carte EURESYS de la série Picolo.
Je développe sous l'environnement Qt Creator (basé sur Qt 4.8.3) avec le compilateur MS VC++ 10 et j'utilise la bibliothèque eVision 6.7.1.
Pour ce qui est de la configuration de la carte et de l'acquisition des images, il n'y a pas de problèmes. Avec OpenCV j'arrive à convertir l'EImage en Mat et à l'afficher dans une fenêtre secondaire.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| void MainWindow::ProcessingCallback(Channel &Ch, SignalInfo &Info)
{
try
{
// Mise à jour de l'EImage à partir des données acquises
UpdateImageConfig(*Info.Surf, EImgSrc);
// Conversion de l'EImage en Mat
Mat cvImg(EImgSrc.GetHeight(), EImgSrc.GetWidth(), CV_8UC3, EImgSrc.GetGenericImagePtr());
// Affichage de l'image
imshow( "Display window", cvImg );
}
catch (Euresys::MultiCam::Exception &e)
{
// Gestion des exceptions...
}
} |
Par contre avec Qt c'est une autre histoire.
De la même manière j'ai utilisé le code suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| void MainWindow::ProcessingCallback(Channel &Ch, SignalInfo &Info)
{
try
{
// Mise à jour de l'EImage à partir des données acquises
UpdateImageConfig(*Info.Surf, EImgSrc);
// Conversion de l'EImage en QImage
QImage imaq((const uchar*)EImgSrc.GetGenericImagePtr(), EImgSrc.GetWidth(), EImgSrc.GetHeight(), EImgSrc.GetBitsPerRow(), QImage::Format_RGB888);
// Affichage de l'image
QPainter painter(this);
painter.drawImage(QPoint(0, 0), imaq);
}
catch (Euresys::MultiCam::Exception &e)
{
// Gestion des exceptions...
}
} |
Mais dans ce cas pas d'affichage de l'image et la sortie d'application m'indique en boucle le message suivant :
Code:
QPainter::begin: Paint device returned engine == 0, type: 1
Pourriez-vous me donner quelques conseils?
D'avance merci!
:)