39 #include <visp3/core/vpConfig.h>
40 #include <visp3/core/vpImage.h>
41 #include <visp3/core/vpDisplay.h>
42 #include <visp3/gui/vpDisplayOpenCV.h>
43 #include <visp3/gui/vpDisplayGTK.h>
44 #include <visp3/gui/vpDisplayX.h>
45 #include <visp3/gui/vpDisplayGDI.h>
46 #include <visp3/gui/vpDisplayD3D.h>
47 #include <visp3/io/vpParseArgv.h>
50 #if (defined (VISP_HAVE_GTK) || defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_D3D9) || defined(VISP_HAVE_OPENCV))
61 #define GETOPTARGS "hlt:dc"
71 void usage(
const char *name,
const char *badparam, vpDisplayType &dtype);
72 bool getOptions(
int argc,
const char **argv, vpDisplayType &dtype,
bool &list,
bool &click_allowed,
bool &
display);
83 void usage(
const char *name,
const char *badparam, vpDisplayType &dtype)
86 Test to open video devices or display.\n\
89 %s [-t <type of video device>] [-l] [-c] [-d] [-h]\n\
94 case vpX11: display =
"X11";
break;
95 case vpGTK: display =
"GTK";
break;
96 case vpGDI: display =
"GDI";
break;
97 case vpD3D: display =
"D3D";
break;
98 case vpCV: display =
"CV";
break;
103 -t <type of video device> \"%s\"\n\
104 String specifying the video device to use.\n\
106 \"X11\": only on UNIX platforms,\n\
107 \"GTK\": on all plaforms,\n\
108 \"GDI\": only on Windows platform (Graphics Device Interface),\n\
109 \"D3D\": only on Windows platform (Direct3D).\n\
110 \"CV\" : (OpenCV).\n\
113 Disable the mouse click. Useful to automaze the \n\
114 execution of this program without humain intervention.\n\
117 Turn off the display.\n\
120 Print the list of video-devices available and exit.\n\
123 Print the help.\n\n",
127 fprintf(stdout,
"\nERROR: Bad parameter [%s]\n", badparam);
143 bool getOptions(
int argc,
const char **argv,
144 vpDisplayType &dtype,
bool &list,
145 bool &click_allowed,
bool &display)
149 std::string sDisplayType;
153 case 'l': list =
true;
break;
154 case 't': sDisplayType = optarg_;
156 if (sDisplayType.compare(
"X11") == 0) {
159 else if (sDisplayType.compare(
"GTK") == 0) {
162 else if (sDisplayType.compare(
"GDI") == 0) {
165 else if (sDisplayType.compare(
"D3D") == 0) {
168 else if (sDisplayType.compare(
"CV") == 0) {
173 case 'h': usage(argv[0], NULL, dtype);
return false;
break;
174 case 'c': click_allowed =
false;
break;
175 case 'd': display =
false;
break;
178 usage(argv[0], optarg_, dtype);
return false;
break;
182 if ((c == 1) || (c == -1)) {
184 usage(argv[0], NULL, dtype);
185 std::cerr <<
"ERROR: " << std::endl;
186 std::cerr <<
" Bad argument " << optarg_ << std::endl << std::endl;
193 int main(
int argc,
const char ** argv)
196 bool opt_list =
false;
197 vpDisplayType opt_dtype;
198 bool opt_click_allowed =
true;
199 bool opt_display =
true;
202 #if defined VISP_HAVE_GTK
204 #elif defined VISP_HAVE_X11
206 #elif defined VISP_HAVE_GDI
208 #elif defined VISP_HAVE_D3D9
210 #elif defined VISP_HAVE_OPENCV
215 if (getOptions(argc, argv, opt_dtype, opt_list,
216 opt_click_allowed, opt_display) ==
false) {
222 unsigned nbDevices = 0;
223 std::cout <<
"List of video-devices available: \n";
224 #if defined VISP_HAVE_GTK
225 std::cout <<
" GTK (use \"-t GTK\" option to use it)\n";
228 #if defined VISP_HAVE_X11
229 std::cout <<
" X11 (use \"-t X11\" option to use it)\n";
232 #if defined VISP_HAVE_GDI
233 std::cout <<
" GDI (use \"-t GDI\" option to use it)\n";
236 #if defined VISP_HAVE_D3D9
237 std::cout <<
" D3D (use \"-t D3D\" option to use it)\n";
240 #if defined VISP_HAVE_OPENCV
241 std::cout <<
" CV (use \"-t CV\" option to use it)\n";
245 std::cout <<
" No display is available\n";
261 std::cout <<
"Requested X11 display functionnalities..." << std::endl;
262 #if defined VISP_HAVE_X11
266 std::cout <<
" Sorry, X11 video device is not available.\n";
267 std::cout <<
"Use \"" << argv[0]
268 <<
" -l\" to print the list of available devices.\n";
273 std::cout <<
"Requested GTK display functionnalities..." << std::endl;
274 #if defined VISP_HAVE_GTK
278 std::cout <<
" Sorry, GTK video device is not available.\n";
279 std::cout <<
"Use \"" << argv[0]
280 <<
" -l\" to print the list of available devices.\n";
285 std::cout <<
"Requested GDI display functionnalities..." << std::endl;
286 #if defined VISP_HAVE_GDI
290 std::cout <<
" Sorry, GDI video device is not available.\n";
291 std::cout <<
"Use \"" << argv[0]
292 <<
" -l\" to print the list of available devices.\n";
297 std::cout <<
"Requested D3D display functionnalities..." << std::endl;
298 #if defined VISP_HAVE_D3D9
302 std::cout <<
" Sorry, D3D video device is not available.\n";
303 std::cout <<
"Use \"" << argv[0]
304 <<
" -l\" to print the list of available devices.\n";
309 std::cout <<
"Requested OpenCV display functionnalities..." << std::endl;
310 #if defined(VISP_HAVE_OPENCV)
314 std::cout <<
" Sorry, OpenCV video device is not available.\n";
315 std::cout <<
"Use \"" << argv[0]
316 <<
" -l\" to print the list of available devices.\n";
323 int winx1 = 100, winy1 = 200;
324 d1->
init(I1, winx1, winy1,
"Display 1");
326 int winx2 = winx1+10+(int)I1.getWidth(), winy2 = winy1;
327 d2->init(I2, winx2, winy2,
"Display 2");
336 std::cout <<
"A click in display 1 to exit..." << std::endl;
337 if ( opt_click_allowed )
344 std::cout <<
"Catch an exception: " << e << std::endl;
virtual void init(vpImage< unsigned char > &I, int x=-1, int y=-1, const char *title=NULL)=0
Class that defines generic functionnalities for display.
vpDisplayGDI()
Basic constructor.
Define the X11 console to display images.
error that can be emited by ViSP classes.
static void flush(const vpImage< unsigned char > &I)
static bool parse(int *argcPtr, const char **argv, vpArgvInfo *argTable, int flags)
Display for windows using Direct3D.
static void display(const vpImage< unsigned char > &I)
The vpDisplayOpenCV allows to display image using the opencv library.
The vpDisplayGTK allows to display image using the GTK+ library version 1.2.
virtual bool getClick(bool blocking=true)=0