【问题标题】:How to display few images (each in separate window) with CImg ?如何使用 CImg 显示少量图像(每个图像在单独的窗口中)?
【发布时间】:2012-01-04 08:15:50
【问题描述】:

如何使用 CImg 显示多张图像(每张图像在一个窗口中)?

当我尝试这样的事情时

        cimg_library::CImg<unsigned char> image(s.c_str());
        cimg_library::CImgDisplay main_disp(image, s.c_str()  );
        while (!main_disp.is_closed() ) 
            main_disp.wait();

我必须关闭每个窗口才能到达 nect 并且这样:

        cimg_library::CImg<unsigned char> image(s.c_str());
        cimg_library::CImgDisplay main_disp(image, s.c_str()  )

他们一个接一个地消失了。

【问题讨论】:

  • 回到我使用 CImg 的错误时,我还没有为 X 和 Windows 解决这个问题。我的解决方案是放弃 CImg 并转到 wxWidgets。这是一个很好的决定。

标签: c++ cimg


【解决方案1】:

CImg 打开的窗口是在事件循环中显示的。上面代码sn-p中的事件循环就是while语句里面的块。

while (!main_disp.is_closed() ) 
            main_disp.wait();

帖子中的代码将窗口绘制为构造函数的一部分,然后代码进入事件循环并调用wait()。对 wait() 的调用使应用程序暂停,直到发生“事件”。事件是某种输入。它可能是鼠标单击、鼠标移动、键盘击键,甚至是操作系统的重绘请求。当接收到事件时,应用程序再次开始执行。

我没有时间尝试代码,但是这段代码应该同时显示两个窗口:

cimg_library::CImg<unsigned char> image1(f1.c_str());
cimg_library::CImgDisplay disp1(image1, f1.c_str()  );
cimg_library::CImg<unsigned char> image2(f2.c_str());
cimg_library::CImgDisplay disp2(image1, f2.c_str()  );

//start event loop
while(true) {
     //All the interactive code is inside the event loop
     cimg_library::CImgDisplay::wait(disp1, disp2);
}

教程 (http://cimg.eu/reference/group__cimg__tutorial.html) 有一个打开两个窗口的示例,并展示了如何检查鼠标按钮点击和鼠标位置等内容。

【讨论】:

  • 非常感谢 :)!我稍后会尝试代码,然后我会在这里发布结果(无论它是否有效)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-04
  • 2017-08-19
  • 2011-05-05
  • 1970-01-01
  • 2021-11-20
  • 2022-12-11
相关资源
最近更新 更多