2

CImg を使用して、複数の画像をそれぞれ 1 つのウィンドウに表示するにはどうすればよいでしょうか。

このようなことを試してみると

        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();

次のウィンドウにアクセスするには、各ウィンドウを閉じる必要があります。

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

次々と消えていきます。

4

1 に答える 1

2

CImg によって開かれたウィンドウは、イベント ループ内に表示されることを意味します。上記のコード スニペットのイベント ループは、while ステートメント内のブロックです。

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

投稿のコードは、コンストラクターの一部としてウィンドウを描画し、コードはイベント ループに入り、wait() を呼び出します。wait() の呼び出しにより、アプリケーションは「イベント」が発生するまで一時停止します。イベントは何らかの入力です。マウス クリック、マウスの移動、キーボードからのキーストローク、またはオペレーティング システムからの再描画要求でさえあります。イベントが受信されると、アプリケーションは再び実行を開始します。

コードを試す時間はありませんでしたが、このコードでは 2 つのウィンドウが同時に表示されるはずです。

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 ) には、2 つのウィンドウが開いている例があり、マウス ボタンのクリックやマウスの位置などを確認する方法が示されています。

于 2012-01-06T06:25:46.603 に答える