Figure 1: Source code to hide a watermark in an image
/* file bhidet.c */ #include "cips.h" main(argc, argv) int argc; char *argv[]; { char image_name[80], water_name[80]; int i, j; short factor; short **the_image, **out_image; struct tiff_header_struct image_header1; struct tiff_header_struct image_header2; ... /* code to interpret the command line - not shown */ ... read_tiff_header(image_name, &image_header1); read_tiff_header(water_name, &image_header2); ... /* code to check that the two images are the same size - not shown */ ... /* Allocate the two image arrays. */ the_image = malloc(image_header1.image_length * sizeof(short *)); for(i=0; i<image_header1.image_length; i++){ the_image[i] = malloc(image_header1.image_width * sizeof(short )); if(the_image[i] == '\0'){ printf("\n\tmalloc of the_image[%d] failed", i); exit(0); } /* ends if */ } /* ends loop over i */ out_image = malloc(image_header2.image_length * sizeof(short *)); for(i=0; i<image_header2.image_length; i++){ out_image[i] = malloc(image_header2.image_width * sizeof(short )); if(out_image[i] == '\0'){ printf("\n\tmalloc of out_image[%d] failed", i); exit(0); } /* ends if */ } /* ends loop over i */ /* Read the images; add the factor to the image per the watermark image; write the resulting image */ bread_tiff_image(image_name, the_image); bread_tiff_image(water_name, out_image); for(i=0; i<image_header1.image_length; i++){ for(j=0; j<image_header1.image_width; j++){ if(out_image[i][j] != 0){ the_image[i][j] = the_image[i][j] + factor; if(the_image[i][j] > GRAY_LEVELS) the_image[i][j] = GRAY_LEVELS; } /* ends if */ } /* ends loop over j */ } /* ends loop over i */ bwrite_tiff_image(image_name, the_image); free_image_array(the_image, image_header1.image_length); free_image_array(out_image, image_header2.image_length); } /* ends main */ ... /*********************************************** * * file bsub.c * *************************************************/ #include "cips.h" main(argc, argv) int argc; char *argv[]; { char min_name[80], sub_name[80]; int i, j; short **the_image, **out_image; struct tiff_header_struct image_header1; struct tiff_header_struct image_header2; ... /* code to read interpret the command line - not shown */ ... read_tiff_header(min_name, &image_header1); /* minuend image */ read_tiff_header(sub_name, &image_header2); /* subtrahend */ ... /* code to ensure image files are same size - not shown */ ... /* Allocate the two image arrays. */ the_image = malloc(image_header1.image_length * sizeof(short *)); for(i=0; i<image_header1.image_length; i++){ the_image[i] = malloc(image_header1.image_width * sizeof(short )); if(the_image[i] == '\0'){ printf("\n\tmalloc of the_image[%d] failed", i); exit(0); } /* ends if */ } /* ends loop over i */ out_image = malloc(image_header2.image_length * sizeof(short *)); for(i=0; i<image_header2.image_length; i++){ out_image[i] = malloc(image_header2.image_width * sizeof(short )); if(out_image[i] == '\0'){ printf("\n\tmalloc of out_image[%d] failed", i); exit(0); } /* ends if */ } /* ends loop over i */ /* Read the images; subtract one image from the other; write the resulting image */ bread_tiff_image(min_name, the_image); bread_tiff_image(sub_name, out_image); for(i=0; i<image_header1.image_length; i++){ for(j=0; j<image_header1.image_width; j++){ the_image[i][j] = the_image[i][j] - out_image[i][j]; if(the_image[i][j] < 0) the_image[i][j] = 0; } /* ends loop over j */ } /* ends loop over i */ bwrite_tiff_image(min_name, the_image); free_image_array(the_image, image_header1.image_length); free_image_array(out_image, image_header2.image_length); } /* ends main */ /* End of File */