From 3863aa643f604f17b79684093fd34e7a67b093fa Mon Sep 17 00:00:00 2001 From: Johannes Hofmann Date: Sat, 28 Oct 2006 00:03:29 +0200 Subject: fix ImageMetaData classes --- src/GipfelWidget.cxx | 58 +++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 30 deletions(-) (limited to 'src/GipfelWidget.cxx') diff --git a/src/GipfelWidget.cxx b/src/GipfelWidget.cxx index 75451ec..8314222 100644 --- a/src/GipfelWidget.cxx +++ b/src/GipfelWidget.cxx @@ -35,6 +35,8 @@ #include #include +#include "ExifImageMetaData.H" +#include "JpgcomImageMetaData.H" #include "Fl_Search_Chooser.H" #include "choose_hill.H" #include "util.h" @@ -76,14 +78,9 @@ GipfelWidget::GipfelWidget(int X,int Y,int W, int H): Fl_Widget(X, Y, W, H) { int GipfelWidget::load_image(char *file) { - char * args[32]; - FILE *p; - pid_t pid; - char buf[1024]; - double lo, la, he, dir, ni, ti, sc; - int status; - Projection::Projection_t pt = Projection::TANGENTIAL; Fl_Image *new_img; + ImageMetaData *md; + int ret; new_img = new Fl_JPEG_Image(file); @@ -112,32 +109,33 @@ GipfelWidget::load_image(char *file) { mb->add("Center Peak", 0, (Fl_Callback*) center_cb, this); // try to retrieve gipfel data from JPEG comment section - args[0] = "rdjpgcom"; - args[1] = file; - args[2] = NULL; - - p = pexecvp(args[0], args, &pid, "r"); - if (p) { - while (fgets(buf, sizeof(buf), p) != NULL) { - if (sscanf(buf, GIPFEL_FORMAT, &lo, &la, &he, &dir, &ni, &ti, &sc, &pt) >= 7) { - set_view_long(lo); - set_view_lat(la); - set_view_height(he); - set_center_angle(dir); - set_nick_angle(ni); - set_tilt_angle(ti); - set_scale(sc); - set_projection(pt); - - break; - } + md = new JpgcomImageMetaData(); + ret = md->load_image(file); + if (ret != 1) { + set_view_long(md->get_longitude()); + set_view_lat(md->get_latitude()); + set_view_height(md->get_height()); + set_center_angle(md->get_direction()); + set_nick_angle(md->get_nick()); + set_tilt_angle(md->get_tilt()); + set_projection((Projection::Projection_t) md->get_projection_type()); + if (ret == 2) { // special compatibility return code for old format + set_scale(md->get_focallength_sensor_ratio()); + } else { + set_scale(md->get_focallength_sensor_ratio() * img->w()); } - fclose(p); - waitpid(pid, &status, 0); - if (WEXITSTATUS(status) == 127 || WEXITSTATUS(status) == 126) { - fprintf(stderr, "%s not found\n", args[0]); + } + + delete md; + + if (ret == 1) { + md = new ExifImageMetaData(); + ret = md->load_image(file); + if (ret == 0) { + set_scale(md->get_focallength_sensor_ratio() * img->w()); } + delete md; } return 0; -- cgit v1.2.3