void test_dsmooth2_inplace(CuTest* tc) { float* img; int nx, ny; float* smooth1; float* smooth2; float sigma; int bites; float eps; nx = 20; ny = 19; sigma = 2.0; eps = 1e-6; bites = nx * ny * sizeof(float); img = random_image(nx, ny); smooth1 = calloc(bites, 1); smooth2 = calloc(bites, 1); dsmooth2(img, nx, ny, sigma, smooth2); // test: can we smooth in-place with dsmooth2? memcpy(smooth1, img, bites); CuAssertIntEquals(tc, 0, compare_images(img, smooth1, nx, ny, 0.0)); dsmooth2(smooth1, nx, ny, sigma, smooth1); CuAssertIntEquals(tc, 0, compare_images(smooth1, smooth2, nx, ny, eps)); free(img); free(smooth1); free(smooth2); }
/* Render the image and compare with the master. */ static void score_drawing(struct drawing *drawing, const struct image *master) { struct image *image; /* We don't allocate it off the drawing, since we don't need * it inside the shared area. */ image = image_of_drawing(NULL, drawing, master); drawing->score = compare_images(image, master); talloc_free(image); }
void test_dsmooth_vs_dsmooth2(CuTest* tc) { float* img; float* img_orig; int nx, ny; float* smooth1; float* smooth2; float sigma; int bites; float eps; nx = 20; ny = 19; sigma = 2.0; eps = 1e-6; bites = nx * ny * sizeof(float); img = random_image(nx, ny); img_orig = calloc(bites, 1); memcpy(img_orig, img, bites); CuAssertIntEquals(tc, 0, compare_images(img, img_orig, nx, ny, 0.0)); smooth1 = calloc(bites, 1); smooth2 = calloc(bites, 1); dsmooth(img, nx, ny, sigma, smooth1); // test: don't change the input image CuAssertIntEquals(tc, 0, compare_images(img, img_orig, nx, ny, 0.0)); dsmooth2(img, nx, ny, sigma, smooth2); // test: don't change the input image CuAssertIntEquals(tc, 0, compare_images(img, img_orig, nx, ny, 0.0)); // test: dsmooth == dsmooth2 CuAssertIntEquals(tc, 0, compare_images(smooth1, smooth2, nx, ny, eps)); free(img); free(img_orig); free(smooth1); free(smooth2); }
/* to move to image_compare.c */ void mutate() { // while(1) { int random_poly = rand() % numObjects; int manipulate = rand() % 3; //memcpy(&objects[random_poly], &parent_dna, sizeof(objects[random_poly])); parent_dna.v1[0] = objects[random_poly].v1[0]; parent_dna.v2[0] = objects[random_poly].v2[0]; parent_dna.v3[0] = objects[random_poly].v3[0]; parent_dna.v1[1] = objects[random_poly].v1[1]; parent_dna.v2[1] = objects[random_poly].v2[1]; parent_dna.v3[1] = objects[random_poly].v3[1]; parent_dna.color[0] = objects[random_poly].color[0]; parent_dna.color[1] = objects[random_poly].color[1]; parent_dna.color[2] = objects[random_poly].color[2]; parent_dna.color[3] = objects[random_poly].color[3]; /* chose random mutation */ switch(manipulate) { case 0: // random color + location recolor_poly(random_poly); resize_poly(random_poly); break; case 1: // random color recolor_poly(random_poly); break; case 2: // random location resize_poly(random_poly); break; default: break; } draw(); system("scrot -u current_out.png"); // screenshot current image temporary until i figure out glgetpixels(). if (compare_images("current_out.png","mona.png") == 0) { //memcpy(&parent_dna, &objects[random_poly], sizeof(parent_dna)); objects[random_poly].v1[0] = parent_dna.v1[0]; objects[random_poly].v2[0] = parent_dna.v2[0]; objects[random_poly].v3[0] = parent_dna.v3[0]; objects[random_poly].v1[1] = parent_dna.v1[1]; objects[random_poly].v2[1] = parent_dna.v2[1]; objects[random_poly].v3[1] = parent_dna.v3[1]; objects[random_poly].color[0] = parent_dna.color[0]; objects[random_poly].color[1] = parent_dna.color[1]; objects[random_poly].color[2] = parent_dna.color[2]; objects[random_poly].color[3] = parent_dna.color[3]; } glutPostRedisplay(); //draw(); // } }
unsigned compare(image_type const & actual, boost::filesystem::path const& reference) const { return compare_images(actual, reference.string()); }
int main() { int result = 0; const size_t WIDTH = 256; const size_t HEIGHT = 256; const char* dummy_file = "testFiles/dummy.flif"; FLIF_IMAGE* im = flif_create_image(WIDTH, HEIGHT); if(im == 0) { printf("Error: flif_create_image failed\n"); result = 1; } else { fill_dummy_image(im); void* blob = 0; size_t blob_size = 0; FLIF_ENCODER* e = flif_create_encoder(); if(e) { flif_encoder_set_interlaced(e, 1); flif_encoder_set_learn_repeat(e, 3); flif_encoder_set_auto_color_buckets(e, 1); flif_encoder_set_frame_delay(e, 100); flif_encoder_set_palette_size(e, 512); flif_encoder_set_lookback(e, 1); flif_encoder_add_image(e, im); if(!flif_encoder_encode_file(e, dummy_file)) { printf("Error: encoding file failed\n"); result = 1; } if(!flif_encoder_encode_memory(e, &blob, &blob_size)) { printf("Error: encoding blob failed\n"); result = 1; } // TODO: uncommenting this causes subsequent test to fail??? /*if(!compare_file_and_blob(blob, blob_size, dummy_file)) { result = 1; }*/ flif_destroy_encoder(e); e = 0; } FLIF_DECODER* d = flif_create_decoder(); if(d) { flif_decoder_set_quality(d, 100); flif_decoder_set_scale(d, 1); { if(!flif_decoder_decode_file(d, dummy_file)) { printf("Error: decoding file failed\n"); result = 1; } FLIF_IMAGE* decoded = flif_decoder_get_image(d, 0); if(decoded == 0) { printf("Error: No decoded image found\n"); result = 1; } else if(compare_images(im, decoded) != 0) { result = 1; } } { if(!flif_decoder_decode_memory(d, blob, blob_size)) { printf("Error: decoding memory failed\n"); result = 1; } FLIF_IMAGE* decoded = flif_decoder_get_image(d, 0); if(decoded == 0) { printf("Error: No decoded image found\n"); result = 1; } else if(compare_images(im, decoded) != 0) { result = 1; } } flif_destroy_decoder(d); d = 0; } flif_destroy_image(im); im = 0; if(blob) { flif_free_memory(blob); blob = 0; } } printf("interface test has succeeded.\n"); return result; }
int main(int argc, char** argv) { if (argc < 2) { printf("first argument must be a file path for the test image"); return 1; } int result = 0; const size_t WIDTH = 256; const size_t HEIGHT = 256; const char* dummy_file = argv[1]; FLIF_IMAGE* im = flif_create_image(WIDTH, HEIGHT); if(im == 0) { printf("Error: flif_create_image failed\n"); result = 1; } else { fill_dummy_image(im); void* blob = 0; size_t blob_size = 0; FLIF_ENCODER* e = flif_create_encoder(); if(e) { flif_encoder_set_interlaced(e, 1); flif_encoder_set_learn_repeat(e, 3); flif_encoder_set_auto_color_buckets(e, 1); flif_encoder_set_palette_size(e, 512); flif_encoder_set_lookback(e, 1); flif_encoder_add_image(e, im); if(!flif_encoder_encode_file(e, dummy_file)) { printf("Error: encoding file failed\n"); result = 1; } flif_destroy_encoder(e); e = 0; } e = flif_create_encoder(); if(e) { flif_encoder_set_interlaced(e, 1); flif_encoder_set_learn_repeat(e, 3); flif_encoder_set_auto_color_buckets(e, 1); flif_encoder_set_palette_size(e, 512); flif_encoder_set_lookback(e, 1); flif_encoder_add_image(e, im); if(!flif_encoder_encode_memory(e, &blob, &blob_size)) { printf("Error: encoding blob failed\n"); result = 1; } // TODO: uncommenting this causes subsequent test to fail??? /*if(!compare_file_and_blob(blob, blob_size, dummy_file)) { result = 1; }*/ flif_destroy_encoder(e); e = 0; } FLIF_DECODER* d = flif_create_decoder(); if(d) { flif_decoder_set_quality(d, 100); flif_decoder_set_scale(d, 1); { if(!flif_decoder_decode_file(d, dummy_file)) { printf("Error: decoding file failed\n"); result = 1; } FLIF_IMAGE* decoded = flif_decoder_get_image(d, 0); if(decoded == 0) { printf("Error: No decoded image found\n"); result = 1; } else if(compare_images(im, decoded) != 0) { result = 1; } } { if(!flif_decoder_decode_memory(d, blob, blob_size)) { printf("Error: decoding memory failed\n"); result = 1; } FLIF_IMAGE* decoded = flif_decoder_get_image(d, 0); if(decoded == 0) { printf("Error: No decoded image found\n"); result = 1; } else if(compare_images(im, decoded) != 0) { result = 1; } } flif_destroy_decoder(d); d = 0; } FLIF_INFO* info = flif_read_info_from_memory(blob, blob_size); if(info) { int w = flif_info_get_width(info); int h = flif_info_get_height(info); int channels = flif_info_get_nb_channels(info); int depth = flif_info_get_depth(info); int n = flif_info_num_images(info); if(w != WIDTH || h != HEIGHT || channels != 4 || depth != 8 || n != 1) { printf("Error: info should be %dx%d, %d channels, %d bit, %d images.\n" " Instead it is %dx%d, %d channels, %d bit, %d images.\n", WIDTH, HEIGHT, 4, 8, 1, w, h, channels, depth, n); result = 1; } flif_destroy_info(info); info = 0; } else { printf("Error: flif_read_info_from_memory failed\n"); result = 1; } flif_destroy_image(im); im = 0; if(blob) { flif_free_memory(blob); blob = 0; } } if (result) printf("interface test has FAILED.\n"); else printf("interface test has succeeded.\n"); return result; }
int main (int argc, char **argv) { SwfdecPlayer *player; SwfdecURL *url; yaml_emitter_t emitter; yaml_event_t event; FILE *output; int i; const char* directory_prefix = NULL; char output_filename_serial[256] = {0}; unsigned long frame_interval = 0; unsigned long accum_interval = 0; int frame_count = 1; unsigned int override_width = 0; unsigned int override_height = 0; float override_scale = 1.0f; const char* input_filename = NULL; const char* output_filename = NULL; int base_index = 0; cairo_surface_t *surface[2] = {NULL, NULL}; cairo_t *cr[2] = {NULL, NULL}; int loop = 0; int center_x = -1; int center_y = -1; /* Parse the command line arguments */ for(i = 1; i < argc; ++i ) { const char* arg = argv[i]; if ( arg[0] == '-' ) { if ( arg[1] == 'w' ) { override_width = atoi(arg+3); } else if ( arg[1] == 'h' ) { override_height = atoi(arg+3); } else if ( arg[1] == 's' ) { override_scale = (float)atof(arg+3); } else if ( arg[1] == 'f' ) { frame_count = atof(arg+3); } else if ( arg[1] == 'l' ) { loop = atoi(arg+3); } else if ( arg[1] == 'd' ) { directory_prefix = arg+3; } else if ( arg[1] == 'x' ) { center_x = atoi(arg+3); } else if ( arg[1] == 'y' ) { center_y = atoi(arg+3); } else { printf("Unknown option: %s\n", arg); } } else { if (!input_filename ) { input_filename = arg; } else { output_filename = arg; } } } if (!input_filename || !output_filename) { print_usage(argv[0]); return 1; } /* Create the Emitter object. */ yaml_emitter_initialize(&emitter); // init swfdec_init (); url = swfdec_url_new_from_input (input_filename); if (!url) { printf("Input file not found: %s.\n", input_filename); return 1; } /* Set a file output. */ sprintf(output_filename_serial, "%s.yaml", output_filename); output = fopen(output_filename_serial, "wb"); yaml_emitter_set_output_file(&emitter, output); //yaml_emitter_set_output(&emitter, write_handler, output); player = swfdec_player_new (NULL); swfdec_player_set_url (player, url); /* Create and emit the STREAM-START event. */ yaml_stream_start_event_initialize(&event, YAML_UTF8_ENCODING); yaml_emitter_emit(&emitter, &event); /* Create document */ yaml_document_start_event_initialize(&event, NULL, NULL, NULL, 1); yaml_emitter_emit(&emitter, &event); /* Create mapping */ yaml_mapping_start_event_initialize(&event, NULL, NULL, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); yaml_scalar_event_initialize(&event, NULL, NULL, (yaml_char_t*)"type", strlen("type"), 1, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); yaml_scalar_event_initialize(&event, NULL, NULL, (yaml_char_t*)"keyframe", strlen("keyframe"), 1, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); swfdec_player_advance (player, 0); if ( override_width == 0 || override_height == 0 ) { swfdec_player_get_default_size(player, &override_width, &override_height); } /* need to set player size */ swfdec_player_set_size(player, (unsigned int)override_width * override_scale, (unsigned int)override_height * override_scale); { char buf[256] = {0}; yaml_scalar_event_initialize(&event, NULL, NULL, (yaml_char_t*)"defaultframerate", strlen("defaultframerate"), 1, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); sprintf(buf, "%f", swfdec_player_get_rate(player)); yaml_scalar_event_initialize(&event, NULL, NULL, (yaml_char_t*)buf, strlen(buf), 1, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); } yaml_scalar_event_initialize(&event, NULL, NULL, (yaml_char_t*)"loop", strlen("loop"), 1, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); if ( loop ) { yaml_scalar_event_initialize(&event, NULL, NULL, (yaml_char_t*)"true", strlen("true"), 1, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); } else { yaml_scalar_event_initialize(&event, NULL, NULL, (yaml_char_t*)"false", strlen("false"), 1, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); } if (center_x >= 0 ) { char buf[256] = {0}; yaml_scalar_event_initialize(&event, NULL, NULL, (yaml_char_t*)"center_point_x", strlen("center_point_x"), 1, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); sprintf(buf, "%d", center_x); yaml_scalar_event_initialize(&event, NULL, NULL, (yaml_char_t*)buf, strlen(buf), 1, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); } if (center_y >= 0 ) { char buf[256] = {0}; yaml_scalar_event_initialize(&event, NULL, NULL, (yaml_char_t*)"center_point_y", strlen("center_point_y"), 1, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); sprintf(buf, "%d", center_y); yaml_scalar_event_initialize(&event, NULL, NULL, (yaml_char_t*)buf, strlen(buf), 1, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); } printf("Default frame rate: %f\n", swfdec_player_get_rate(player)); frame_interval = (unsigned long)(1000.0 / swfdec_player_get_rate(player)); printf("Default frame interval: %ld\n", frame_interval); yaml_scalar_event_initialize(&event, NULL, NULL, (yaml_char_t*)"content", strlen("content"), 1, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); /* Create mapping */ yaml_mapping_start_event_initialize(&event, NULL, NULL, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); for(i = 0; i < frame_count; ++i ) { int new_index = (base_index + 1) % 2; surface[new_index] = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, (unsigned int)(override_width * override_scale), (unsigned int)(override_height * override_scale)); cr[new_index] = cairo_create (surface[new_index]); // render the image swfdec_player_render (player, cr[new_index]); frame_interval = swfdec_player_get_next_event(player); accum_interval += frame_interval; if ( compare_images(surface[base_index], surface[new_index]) <= 5 ) { cairo_destroy (cr[new_index]); cairo_surface_destroy (surface[new_index]); cr[new_index] = NULL; surface[new_index] = NULL; if ( frame_interval > 0 ) swfdec_player_advance (player, frame_interval); } else { if ( surface[base_index] && surface[new_index] ) { char buf[256] = {0}; sprintf(buf, "%f", (double)accum_interval / 1000.0); yaml_scalar_event_initialize(&event, NULL, NULL, (yaml_char_t*)output_filename_serial, strlen(output_filename_serial), 1, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); yaml_scalar_event_initialize(&event, NULL, NULL, (yaml_char_t*)buf, strlen(buf), 1, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); accum_interval = 0; } cairo_destroy (cr[base_index]); cairo_surface_destroy (surface[base_index]); cr[base_index] = NULL; surface[base_index] = NULL; if (directory_prefix) sprintf(output_filename_serial, "%s/%s%3.3d.png", directory_prefix, output_filename, i+1); else sprintf(output_filename_serial, "%s%3.3d.png", output_filename, i+1); cairo_surface_write_to_png (surface[new_index], output_filename_serial); if ( frame_interval > 0 ) swfdec_player_advance (player, frame_interval); base_index = new_index; } } /* the last frame output */ if ( surface[base_index] ) { char buf[256] = {0}; sprintf(buf, "%f", (double)accum_interval / 1000.0); yaml_scalar_event_initialize(&event, NULL, NULL, (yaml_char_t*)output_filename_serial, strlen(output_filename_serial), 1, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); yaml_scalar_event_initialize(&event, NULL, NULL, (yaml_char_t*)buf, strlen(buf), 1, 1, YAML_ANY_SCALAR_STYLE); yaml_emitter_emit(&emitter, &event); accum_interval = 0; } cairo_destroy (cr[base_index]); cairo_surface_destroy (surface[base_index]); g_object_unref (player); swfdec_url_free(url); /* End mapping */ yaml_mapping_end_event_initialize(&event); yaml_emitter_emit(&emitter, &event); /* End mapping */ yaml_mapping_end_event_initialize(&event); yaml_emitter_emit(&emitter, &event); /* End of document */ yaml_stream_end_event_initialize(&event); yaml_emitter_emit(&emitter, &event); /* Create and emit the STREAM-END event. */ yaml_stream_end_event_initialize(&event); yaml_emitter_emit(&emitter, &event); yaml_emitter_flush(&emitter); /* Destroy the Emitter object. */ yaml_emitter_delete(&emitter); fclose(output); return 0; }
int main(int argc, char **argv) { gui_initialize(&argc, &argv); gui_create_window_layout(); gui_draw_window(); if (argc == 2 && strcmp(argv[1], "--help") == 0) { printf("texview -- a texture and image file viewer.\n" "Usage: texview <filename1> <filename2>\n" "<filename2> is optional.\n"); exit(1); } option_quiet = 1; current_nu_image_sets = 0; if (argc >= 2) { source_filename[0] = argv[1]; source_filetype[0] = determine_filename_type(source_filename[0]); if (!(source_filetype[0] & FILE_TYPE_TEXTURE_BIT) && !(source_filetype[0] & FILE_TYPE_IMAGE_BIT)) { printf("Error -- expected image or texture filename as argument.\n"); exit(1); } if (!file_exists(source_filename[0])) { printf("Error -- source file %s doesn't exist or is unreadable.\n", source_filename[0]); exit(1); } current_nu_image_sets = 1; } if (argc >= 3) { source_filename[1] = argv[2]; source_filetype[1] = determine_filename_type(source_filename[1]); if (!(source_filetype[1] & FILE_TYPE_TEXTURE_BIT) && !(source_filetype[1] & FILE_TYPE_IMAGE_BIT)) { printf("Error -- expected image or texture filename as second argument.\n"); exit(1); } if (!file_exists(source_filename[1])) { printf("Error -- source file %s doesn't exist or is unreadable.\n", source_filename[1]); exit(1); } current_nu_image_sets = 2; } for (int j = 0; j < current_nu_image_sets; j++) { current_file_type[j] = source_filetype[j]; if (source_filetype[j] & FILE_TYPE_TEXTURE_BIT) { current_nu_mipmaps[j] = load_texture(source_filename[j], source_filetype[j], 32, ¤t_texture[j][0]); for (int i = 0 ; i < current_nu_mipmaps[j]; i++) convert_texture_to_image(¤t_texture[j][i], ¤t_image[j][i]); } else { load_image(source_filename[j], source_filetype[j], ¤t_image[j][0]); current_nu_mipmaps[j] = 1; } if (current_nu_mipmaps[j] > 1) printf("Found %d mipmap levels.\n", current_nu_mipmaps[j]); } current_rmse[0] = -1.0; if (current_nu_image_sets > 1) current_rmse[0] = compare_images(¤t_image[0][0], ¤t_image[1][0]); for (int i = 0; i < current_nu_image_sets; i++) { if (!current_image[i][0].is_half_float && current_image[i][0].bits_per_component == 8 && current_image[i][0].nu_components > 2) convert_image_set(i); } gui_zoom_fit_to_window(); for (int i = 0; i < current_nu_image_sets; i++) gui_create_base_surface(i); gui_draw_and_show_window(); gui_run(); }