void SaverXml::visit(document::Image& image) { writer.writeStartElement("image"); writeId(image); if ( image.frame() ) writeId(*image.frame(), "frame"); if ( !image.metadata().empty() ) { writeMetadata(image.metadata()); writer.writeStartElement("bitmap"); } writer.writeAttribute("type", image_format.name()); QByteArray image_data; QBuffer buffer(&image_data); QImageWriter image_writer(&buffer, image_format.preferredSuffix().toLatin1()); image_writer.write(image.image()); writer.writeCharacters(image_data.toBase64()); if ( !image.metadata().empty() ) { writer.writeEndElement(); } writer.writeEndElement(); }
int main(int argc, char **argv) { try{ /* Set some default behaviors. */ const char *i = "latlong"; const char *o = "latlong"; const char *p = "rgss"; const char *f = "linear"; float rot[3] = { 0.f, 0.f, 0.f }; int n = 1024; int c; /* Parse the command line options. */ const char* convtype=NULL; double convparameter = 0.0; while ((c = getopt(argc, argv, "i:o:p:n:f:c:x:y:z:")) != -1) switch (c) { case 'i': i = optarg; break; case 'o': o = optarg; break; case 'p': p = optarg; break; case 'f': f = optarg; break; case 'x': rot[0] = strtod(optarg, 0); break; case 'y': rot[1] = strtod(optarg, 0); break; case 'z': rot[2] = strtod(optarg, 0); break; case 'n': n = strtol(optarg, 0, 0); break; case 'c': { convtype = optarg; if(!strcmp(convtype, "phong") || !strcmp(convtype, "gauss") || !strcmp(convtype, "hanning") || !strcmp(convtype, "lanczos")) { try { convparameter = std::stod(argv[optind], 0); } catch (const std::exception& e) { return usage(argv[0]); } } else { return usage(argv[0]); } break; } default: return usage(argv[0]); } int num = 1; image *src = 0; image *dst = 0; image *tmp = 0; to_img img; to_env env; filter fil; /* Select the sampler. */ if (!strcmp(f, "linear")) fil = filter_linear; else if (!strcmp(f, "nearest")) fil = filter_nearest; else return usage(argv[0]); /* Read the input image. */ const int fileArgCt = 2; std::vector<const char*> inputFiles; inputFiles.insert(inputFiles.begin(), &argv[optind], &argv[argc-1]); if (optind + fileArgCt <= argc) { if (!strcmp(i, "cube")) { tmp = image_reader(inputFiles, 6); src = image_border(tmp); img = cube_to_img; } else if (!strcmp(i, "dome")) { src = image_reader(inputFiles, 1); img = dome_to_img; } else if (!strcmp(i, "hemi")) { src = image_reader(inputFiles, 1); img = hemi_to_img; } else if (!strcmp(i, "ball")) { src = image_reader(inputFiles, 1); img = ball_to_img; } else if (!strcmp(i, "latlong") || !strcmp(i, "llsquare")) { src = image_reader(inputFiles, 1); img = rect_to_img; } else return usage(argv[0]); } else return usage(argv[0]); /* Prepare the output image. */ if (src) { if (!strcmp(o, "cube")) { dst = image_alloc((num = 6), n, n, src->c); env = cube_to_env; } else if (!strcmp(o, "dome")) { dst = image_alloc((num = 1), n, n, src->c); env = dome_to_env; } else if (!strcmp(o, "hemi")) { dst = image_alloc((num = 1), n, n, src->c); env = hemi_to_env; } else if (!strcmp(o, "ball")) { dst = image_alloc((num = 1), n, n, src->c); env = ball_to_env; } else if (!strcmp(o, "latlong")) { dst = image_alloc((num = 1), n, 2 * n, src->c); env = rect_to_env; } else if (!strcmp(o, "llsquare")) { dst = image_alloc((num = 1), n, n, src->c); env = rect_to_env; } else return usage(argv[0]); } else { throw std::runtime_error("Failed to load file"); } /* Perform the remapping using the selected pattern. */ if (src && dst) { if (!strcmp(p, "cent")) process(src, dst, ¢_pattern, rot, fil, img, env, num); else if (!strcmp(p, "rgss")) process(src, dst, &rgss_pattern, rot, fil, img, env, num); else if (!strcmp(p, "box2")) process(src, dst, &box2_pattern, rot, fil, img, env, num); else if (!strcmp(p, "box3")) process(src, dst, &box3_pattern, rot, fil, img, env, num); else if (!strcmp(p, "box4")) process(src, dst, &box4_pattern, rot, fil, img, env, num); else return usage(argv[0]); /* Write the output. */ //image_writer(argv[optind + 1], dst, num); image_writer(argv[argc - 1], dst, num); } }catch (const std::runtime_error& e) { std::clog<<e.what()<<std::endl; } return 0; }
int main(int argc, char **argv) { /* Set some default behaviors. */ const char *i = "rect"; const char *o = "rect"; const char *p = "rgss"; const char *f = "linear"; float rot[3] = { 0.f, 0.f, 0.f }; int n = 1024; int c; /* Parse the command line options. */ while ((c = getopt(argc, argv, "i:o:p:n:f:x:y:z:")) != -1) switch (c) { case 'i': i = optarg; break; case 'o': o = optarg; break; case 'p': p = optarg; break; case 'f': f = optarg; break; case 'x': rot[0] = strtod(optarg, 0); break; case 'y': rot[1] = strtod(optarg, 0); break; case 'z': rot[2] = strtod(optarg, 0); break; case 'n': n = strtol(optarg, 0, 0); break; default: return usage(argv[0]); } int num = 1; image *src = 0; image *dst = 0; image *tmp = 0; to_img img; to_env env; filter fil; /* Select the sampler. */ if (!strcmp(f, "linear")) fil = filter_linear; else if (!strcmp(f, "nearest")) fil = filter_nearest; else return usage(argv[0]); /* Read the input image. */ if (optind + 2 <= argc) { if (!strcmp(i, "cube")) { tmp = image_reader(argv[optind], 6); src = image_border(tmp); img = cube_to_img; } else if (!strcmp(i, "dome")) { src = image_reader(argv[optind], 1); img = dome_to_img; } else if (!strcmp(i, "hemi")) { src = image_reader(argv[optind], 1); img = hemi_to_img; } else if (!strcmp(i, "ball")) { src = image_reader(argv[optind], 1); img = ball_to_img; } else if (!strcmp(i, "rect")) { src = image_reader(argv[optind], 1); img = rect_to_img; } else return usage(argv[0]); } else return usage(argv[0]); /* Prepare the output image. */ if (src) { if (!strcmp(o, "cube")) { dst = image_alloc((num = 6), n, n, src->c, src->b, src->s); env = cube_to_env; } else if (!strcmp(o, "dome")) { dst = image_alloc((num = 1), n, n, src->c, src->b, src->s); env = dome_to_env; } else if (!strcmp(o, "hemi")) { dst = image_alloc((num = 1), n, n, src->c, src->b, src->s); env = hemi_to_env; } else if (!strcmp(o, "ball")) { dst = image_alloc((num = 1), n, n, src->c, src->b, src->s); env = ball_to_env; } else if (!strcmp(o, "rect")) { dst = image_alloc((num = 1), n, 2 * n, src->c, src->b, src->s); env = rect_to_env; } else return usage(argv[0]); } /* Perform the remapping using the selected pattern. */ if (src && dst) { if (!strcmp(p, "cent")) process(src, dst, ¢_pattern, rot, fil, img, env, num); else if (!strcmp(p, "rgss")) process(src, dst, &rgss_pattern, rot, fil, img, env, num); else if (!strcmp(p, "box2")) process(src, dst, &box2_pattern, rot, fil, img, env, num); else if (!strcmp(p, "box3")) process(src, dst, &box3_pattern, rot, fil, img, env, num); else if (!strcmp(p, "box4")) process(src, dst, &box4_pattern, rot, fil, img, env, num); else return usage(argv[0]); /* Write the output. */ image_writer(argv[optind + 1], dst, num); } return 0; }