void create_mgif_delta() { void *d; long siz; //conv_2_rgb(); init_palmap(); if (BZTRATA) create_color_state(); set_max_color_change(BZTRATA); create_low_quality(); if (delta_data_size+frame_delta_size>FRAME_LEN) { create_mgif_lzw(); return; } if (!frame_delta_size) return; reduce_palette(); filter_colors(frame_delta,frame_delta_size,color_map); d=join_two_blocks(delta_data,frame_delta,delta_data_size,frame_delta_size,&siz); init_lzw_compressor(8); memset(lzw_buffer,0,sizeof(lzw_buffer)); siz=lzw_encode(d,lzw_buffer,siz); done_lzw_compressor(); free(d); if (siz>FRAME_LEN) { create_mgif_lzw(); return; } write_chunk(MGIF_DELTA,siz,lzw_buffer); create_mgif_pal(); }
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; }