我想在一个由gtkmm编写的Gui中显示一个cv::Mat。所以我做了一个测试。
我有一个小部件
Gtk::Image image
,我想用以下两种方法来设置图片。
// first method, display from file
void displayImage1()
Glib::RefPtr<Gdk::Pixbuf> pixbuf = Gdk::Pixbuf::create_from_file("gtk.png");
image.set(pixbuf);
// second method, display from cv::Mat
void displayImage2()
cv::Mat outImage = cv::imread("gtk.png");
cv::cvtColor(outImage, outImage, CV_BGR2RGB);
Glib::RefPtr<Gdk::Pixbuf> pixbuf = Gdk::Pixbuf::create_from_data(outImage.data, Gdk::COLORSPACE_RGB,false, 8, outImage.cols, outImage.rows, outImage.step);
image.set(pixbuf);
The first method works well.
然而,第二种方法效果并不好,我在屏幕上得到了一个被破坏的图像,如图所示。
如果我把has_alpha参数设置为true,结果也很奇怪(见下图)。
类似的测试是通过使用Gtk::DrawingArea完成的。使用了不同的IDE(但都是linux下的g++编译器)。所有的结果都一样。
我测试了很多图像。有时图像被破坏了,有时程序崩溃了,而
该计划意外地完成了。