47 #include <visp3/core/vpConfig.h> 48 #include <visp3/core/vpDebug.h> 50 #if (defined(_WIN32) && defined(VISP_HAVE_GDI)) 52 #include <visp3/gui/vpDisplayGDI.h> 54 #include <visp3/core/vpImage.h> 55 #include <visp3/core/vpIoTools.h> 56 #include <visp3/io/vpImageIo.h> 57 #include <visp3/io/vpParseArgv.h> 69 #define GETOPTARGS "cdi:o:h" 84 void usage(
const char *name,
const char *badparam, std::string ipath, std::string opath, std::string user)
87 Read an image on the disk, display it using GDI, display some\n\ 88 features (line, circle, caracters) in overlay and finaly write \n\ 89 the image and the overlayed features in an image on the disk\n\ 92 %s [-i <input image path>] [-o <output image path>]\n\ 98 -i <input image path> %s\n\ 99 Set image input path.\n\ 100 From this path read \"Klimt/Klimt.pgm\"\n\ 102 Setting the VISP_INPUT_IMAGE_PATH environment\n\ 103 variable produces the same behaviour than using\n\ 106 -o <output image path> %s\n\ 107 Set image output path.\n\ 108 From this directory, creates the \"%s\"\n\ 109 subdirectory depending on the username, where \n\ 110 Klimt_grey.overlay.ppm output image is written.\n\ 113 Disable the mouse click. Useful to automate the \n\ 114 execution of this program without humain intervention.\n\ 117 Disable the image display. This can be useful \n\ 118 for automatic tests using the task manager under \n\ 122 Print the help.\n\n", ipath.c_str(), opath.c_str(), user.c_str());
125 fprintf(stdout,
"\nERROR: Bad parameter [%s]\n", badparam);
143 bool getOptions(
int argc,
const char **argv, std::string &ipath, std::string &opath,
bool &click_allowed,
144 const std::string &user,
bool &display)
152 click_allowed =
false;
164 usage(argv[0], NULL, ipath, opath, user);
169 usage(argv[0], optarg, ipath, opath, user);
175 if ((c == 1) || (c == -1)) {
177 usage(argv[0], NULL, ipath, opath, user);
178 std::cerr <<
"ERROR: " << std::endl;
179 std::cerr <<
" Bad argument " << optarg << std::endl << std::endl;
186 int main(
int argc,
const char **argv)
189 std::string env_ipath;
190 std::string opt_ipath;
191 std::string opt_opath;
194 std::string filename;
195 std::string username;
196 bool opt_click_allowed =
true;
197 bool opt_display =
true;
204 if (!env_ipath.empty())
208 opt_opath =
"C:\\temp";
214 if (getOptions(argc, argv, opt_ipath, opt_opath, opt_click_allowed, username, opt_display) ==
false) {
219 if (!opt_ipath.empty())
221 if (!opt_opath.empty())
233 usage(argv[0], NULL, ipath, opath, username);
234 std::cerr << std::endl <<
"ERROR:" << std::endl;
235 std::cerr <<
" Cannot create " << odirname << std::endl;
236 std::cerr <<
" Check your -o " << opath <<
" option " << std::endl;
243 if (!opt_ipath.empty() && !env_ipath.empty()) {
244 if (ipath != env_ipath) {
245 std::cout << std::endl <<
"WARNING: " << std::endl;
246 std::cout <<
" Since -i <visp image path=" << ipath <<
"> " 247 <<
" is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
248 <<
" we skip the environment variable." << std::endl;
253 if (opt_ipath.empty() && env_ipath.empty()) {
254 usage(argv[0], NULL, ipath, opath, username);
255 std::cerr << std::endl <<
"ERROR:" << std::endl;
256 std::cerr <<
" Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH " << std::endl
257 <<
" environment variable to specify the location of the " << std::endl
258 <<
" image path where test images are located." << std::endl
277 display.
init(I, 100, 100,
"X11 display");
290 for (
unsigned i = 0; i < I.
getHeight(); i += 20) {
307 for (
unsigned i = 0; i < I.
getWidth(); i += 20) {
330 for (
unsigned int i = 0; i < 100; i += 20) {
358 if (opt_click_allowed) {
359 std::cout <<
"\nA click to close the windows..." << std::endl;
381 displayRGBa.
init(Irgba, 100, 100,
"X11 color display");
389 if (opt_click_allowed) {
390 std::cout <<
"\nA click to display a cross..." << std::endl;
396 std::cout <<
"Cross position: " << ip << std::endl;
403 std::cout <<
"Cross position: " << ip << std::endl;
421 if (opt_click_allowed) {
422 std::cout <<
"\nA click to exit the program..." << std::endl;
424 std::cout <<
"Bye" << std::endl;
429 std::cout <<
"Catch an exception: " << e << std::endl;
434 int main() {
vpERROR_TRACE(
"GDI display only works under windows..."); }
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
static void close(vpImage< unsigned char > &I)
Display for windows using GDI (available on any windows 32 platform).
static void displayText(const vpImage< unsigned char > &I, const vpImagePoint &ip, const std::string &s, const vpColor &color)
error that can be emited by ViSP classes.
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 write(const vpImage< unsigned char > &I, const std::string &filename)
void set_i(const double ii)
static void displayArrow(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color=vpColor::white, unsigned int w=4, unsigned int h=2, unsigned int thickness=1)
static void display(const vpImage< unsigned char > &I)
static void displayRectangle(const vpImage< unsigned char > &I, const vpImagePoint &topLeft, unsigned int width, unsigned int height, const vpColor &color, bool fill=false, unsigned int thickness=1)
static void getImage(const vpImage< unsigned char > &Is, vpImage< vpRGBa > &Id)
void set_j(const double jj)
static void displayCircle(const vpImage< unsigned char > &I, const vpImagePoint ¢er, unsigned int radius, const vpColor &color, bool fill=false, unsigned int thickness=1)
static void displayCross(const vpImage< unsigned char > &I, const vpImagePoint &ip, unsigned int size, const vpColor &color, unsigned int thickness=1)
unsigned int getHeight() const
static void read(vpImage< unsigned char > &I, const std::string &filename)
void init(vpImage< unsigned char > &I, int winx=-1, int winy=-1, const std::string &title="")
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
static void displayLine(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1)
static const vpColor yellow
unsigned int getWidth() const
static void displayDotLine(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1)
static const vpColor blue