50 #include <visp/vpDebug.h>
51 #include <visp/vpConfig.h>
53 #if ( defined(WIN32) && defined(VISP_HAVE_GDI) )
55 #include <visp/vpDisplayGDI.h>
57 #include <visp/vpImage.h>
58 #include <visp/vpImageIo.h>
59 #include <visp/vpParseArgv.h>
60 #include <visp/vpIoTools.h>
72 #define GETOPTARGS "cdi:o:h"
87 void usage(
const char *name,
const char *badparam, std::string ipath, std::string opath, std::string user)
90 Read an image on the disk, display it using GDI, display some\n\
91 features (line, circle, caracters) in overlay and finaly write \n\
92 the image and the overlayed features in an image on the disk\n\
95 %s [-i <input image path>] [-o <output image path>]\n\
101 -i <input image path> %s\n\
102 Set image input path.\n\
103 From this path read \"ViSP-images/Klimt/Klimt.pgm\"\n\
105 Setting the VISP_INPUT_IMAGE_PATH environment\n\
106 variable produces the same behaviour than using\n\
109 -o <output image path> %s\n\
110 Set image output path.\n\
111 From this directory, creates the \"%s\"\n\
112 subdirectory depending on the username, where \n\
113 Klimt_grey.overlay.ppm output image is written.\n\
116 Disable the mouse click. Useful to automate the \n\
117 execution of this program without humain intervention.\n\
120 Disable the image display. This can be useful \n\
121 for automatic tests using the task manager under \n\
125 Print the help.\n\n",
126 ipath.c_str(), opath.c_str(), user.c_str());
145 bool getOptions(
int argc,
const char **argv,
146 std::string &ipath, std::string &opath,
bool &click_allowed,
147 std::string user,
bool &display)
154 case 'c': click_allowed =
false;
break;
155 case 'd': display =
false;
break;
156 case 'i': ipath = optarg;
break;
157 case 'o': opath = optarg;
break;
158 case 'h': usage(argv[0], NULL, ipath, opath, user);
return false;
break;
161 usage(argv[0], optarg, ipath, opath, user);
return false;
break;
165 if ((c == 1) || (c == -1)) {
167 usage(argv[0], NULL, ipath, opath, user);
168 std::cerr <<
"ERROR: " << std::endl;
169 std::cerr <<
" Bad argument " << optarg << std::endl << std::endl;
177 main(
int argc,
const char ** argv)
179 std::string env_ipath;
180 std::string opt_ipath;
181 std::string opt_opath;
184 std::string filename;
185 std::string username;
186 bool opt_click_allowed =
true;
187 bool opt_display =
true;
190 char *ptenv = getenv(
"VISP_INPUT_IMAGE_PATH");
195 if (! env_ipath.empty())
199 opt_opath =
"C:\\temp";
206 if (getOptions(argc, argv, opt_ipath, opt_opath,
207 opt_click_allowed, username, opt_display) ==
false) {
212 if (!opt_ipath.empty())
214 if (!opt_opath.empty())
227 usage(argv[0], NULL, ipath, opath, username);
228 std::cerr << std::endl
229 <<
"ERROR:" << std::endl;
230 std::cerr <<
" Cannot create " << odirname << std::endl;
231 std::cerr <<
" Check your -o " << opath <<
" option " << std::endl;
238 if (!opt_ipath.empty() && !env_ipath.empty()) {
239 if (ipath != env_ipath) {
240 std::cout << std::endl
241 <<
"WARNING: " << std::endl;
242 std::cout <<
" Since -i <visp image path=" << ipath <<
"> "
243 <<
" is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
244 <<
" we skip the environment variable." << std::endl;
249 if (opt_ipath.empty() && env_ipath.empty()){
250 usage(argv[0], NULL, ipath, opath, username);
251 std::cerr << std::endl
252 <<
"ERROR:" << std::endl;
253 std::cerr <<
" Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
255 <<
" environment variable to specify the location of the " << std::endl
256 <<
" image path where test images are located." << std::endl << std::endl;
275 display.
init(I, 100, 100,
"GDI display") ;
288 for (
unsigned i=0 ; i < I.
getHeight() ; i+=20) {
305 for (
unsigned i=0 ; i < I.
getWidth() ; i+=20) {
328 for (
unsigned int i=0 ; i < 100 ; i+=20) {
342 "ViSP is a marvelous software",
357 if (opt_click_allowed) {
358 std::cout <<
"\nA click to close the windows..." << std::endl;
381 displayRGBa.
init(Irgba, 100, 100,
"GDI color display");
389 if (opt_click_allowed) {
390 std::cout <<
"\nA click to display a cross..." << std::endl;
395 std::cout <<
"Cross position: " << ip << std::endl;
403 std::cout <<
"Cross position: " << ip << std::endl;
412 if (opt_click_allowed) {
413 std::cout <<
"\nA click to exit the program..." << std::endl;
415 std::cout <<
"Bye" << std::endl;
void set_j(const double j)
virtual void displayCircle(const vpImagePoint ¢er, unsigned int radius, const vpColor &color, bool fill=false, unsigned int thickness=1)=0
virtual void displayArrow(const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color=vpColor::white, unsigned int w=4, unsigned int h=2, unsigned int thickness=1)=0
static void readPGM(vpImage< unsigned char > &I, const char *filename)
unsigned int getWidth() const
Display for windows using GDI (available on any windows 32 platform).
void set_i(const double i)
static const vpColor green
static void flush(const vpImage< unsigned char > &I)
static bool parse(int *argcPtr, const char **argv, vpArgvInfo *argTable, int flags)
static const vpColor orange
static void display(const vpImage< unsigned char > &I)
virtual void displayCross(const vpImagePoint &ip, unsigned int size, const vpColor &color, unsigned int thickness=1)=0
virtual void displayRectangle(const vpImagePoint &topLeft, unsigned int width, unsigned int height, const vpColor &color, bool fill=false, unsigned int thickness=1)=0
void init(vpImage< unsigned char > &I, int winx=-1, int winy=-1, const char *title=NULL)
static void close(const vpImage< unsigned char > &I)
static void getImage(const vpImage< unsigned char > &Is, vpImage< vpRGBa > &Id)
virtual void displayDotLine(const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1)=0
virtual void displayCharString(const vpImagePoint &ip, const char *text, const vpColor &color=vpColor::green)=0
unsigned int getHeight() const
static void writePPM(const vpImage< unsigned char > &I, const char *filename)
virtual bool getClick(bool blocking=true)=0
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
virtual void displayLine(const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1)=0
static const vpColor yellow
static const vpColor blue