Как отобразить несколько изображений (каждое в отдельном окне) с помощью CImg? - PullRequest
2 голосов
/ 04 января 2012

Как можно отобразить несколько изображений - каждое в одном окне - с помощью 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()  )

Они исчезают один за другим.

1 Ответ

1 голос
/ 06 января 2012

Окна, открытые CImg, должны отображаться внутри цикла событий. Цикл событий в приведенном выше фрагменте кода является блоком внутри оператора 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)) содержит пример двух открытых окон и показывает, как проверить наличие таких вещей, как щелчки мыши и положение мыши.

...