Esempio n. 1
0
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;
}
Esempio n. 2
0
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);
}