int main(int argc, char** argv) { struct image_t* image; struct image_t* new_image; struct palette_coeff_t* palette; unsigned int k; COLOR_TYPE* new_coeff; unsigned int new_coeff_size; unsigned int i; if(argc != 4) { print_command_line(); return EXIT_FAILURE; } else { image = read_image(argv[1]); k = atoi(argv[2]); } fflush(stdout); palette = create_palette(image); printf("reduce palette : %d\n", reduce_palette(palette, 0, k)); new_coeff = backtrace_palette_index(palette->model->size, 0, k, &new_coeff_size, palette); printf("New color : "); for(i = 0; i<new_coeff_size; i++) { printf("%d ", new_coeff[i]); } printf("\n"); new_image = construct_image(new_coeff, new_coeff_size, image, palette->model); save_image(argv[3], new_image); free(new_image->pixels); free(new_image); free(new_coeff); free(image->pixels); free(image); free(palette->model->data); free(palette->model); free(palette->coeff); free(palette); return EXIT_SUCCESS; }
void parse_command_line(int argc, char **argv, struct command_line_args *ob) { int opt = 0, longIndex = 0; double temp =0; memset(ob,'\0',sizeof(struct command_line_args)); opt = getopt_long_only(argc, argv, ":", longOpts, &longIndex); while (opt != -1) { switch(opt) { case 'l': ob->packet_rate = atof(optarg); break; case 'm': ob->serving_rate = atof(optarg); break; case 'r': ob->token_rate = atof(optarg); break; case 'B': temp = atof(optarg); if(temp != (int)temp || temp < 0) { LOG(stderr,"\nError: Argument for option -B should be positive integer less than 2147483647\n"); exit(-1); } ob->bucket_depth = (int)temp; break; case 'P': temp = atof(optarg); if(temp != (int)temp || temp < 0) { LOG(stderr,"\nError: Argument for option -P should be positive integer less than 2147483647\n"); exit(-1); } ob->token_per_packet = (int)temp; break; case 'n': temp = atof(optarg); if(temp != (int)temp || temp < 0) { LOG(stderr,"\nError: Argument for option -n should be positive integer less than 2147483647\n"); exit(-1); } ob->no_of_packets = (int)temp; break; case 't': TraceDriven = 1; ob->tsfile_name = optarg; break; case ':': case '?': default : LOG(stderr, "\nInvalid command line arguments passed\n"); exit(-1); break; } opt = getopt_long_only(argc, argv, ":", longOpts, &longIndex); } if(TraceDriven) parse_tsfile(ob); if(!ob->packet_rate) ob->packet_rate = 0.5; if(!ob->serving_rate) ob->serving_rate = 0.35; if(!ob->token_rate) ob->token_rate = 1.5; if(!ob->bucket_depth) ob->bucket_depth = 10; if(!ob->token_per_packet) ob->token_per_packet = 3; if(!ob->no_of_packets) ob->no_of_packets = 20; print_command_line(ob); }