/* This routine pulls the message image out of the cover image
(the opposite of the cover_image routine) */
int uncover_image(cover_image_name,
message_image_name,
cover_image,
message_image,
mlength,
mwidth,
clength,
cwidth,
lsb,
n)
char cover_image_name[],
message_image_name[];
int lsb, n;
long clength, cwidth, mlength, mwidth;
short **cover_image,
**message_image;
{
int h_counter;
bread_tiff_image(cover_image_name, cover_image);
for(h_counter=0; h_counter<mwidth; h_counter++){
uncover_pixels(cover_image,
message_image,
h_counter,
h_counter*n,
lsb,
n,
mlength);
} /* ends loop over h_counter */
bwrite_tiff_image(message_image_name, message_image);
} /* ends uncover_image */
/* This routine pulls the eight bits that make up a pixel in the
message image out of the LSB of the eight pixels in the cover
image. It is the opposite of the cover_pixels routine. */
int uncover_pixels(cover_image,
message_image,
mie,
cie,
lsb,
n,
mlength)
int cie, lsb, mie, n;
long mlength;
short **cover_image,
**message_image;
{
char result,
new_message,
sample;
char mask1[EIGHT] =
{0x80, /* 1000 0000 */
0x40, /* 0100 0000 */
0x20, /* 0010 0000 */
0x10, /* 0001 0000 */
0x08, /* 0000 1000 */
0x04, /* 0000 0100 */
0x02, /* 0000 0010 */
0x01}; /* 0000 0001 */
int c, c_counter, i, j;
/* If a pixel in the cover image is odd, its lsb has been set,
so the corresponding bit in the message image should be
set */
for(i=0; i<mlength; i++){
c = n-1;
new_message = 0x00;
for(j=0; j<n; j++){
if(is_odd(cover_image[i][cie+j])){
/* set bit c */
if(lsb)
new_message = new_message | mask1[j];
else
new_message = new_message | mask1[c];
} /* ends if is_odd */
c--;
} /* ends loop over j */
message_image[i][mie] = new_message;
} /* ends loop over i */
} /* ends uncover_pixels */
/* is_odd returns 1 if argument is odd, 0 if even */
int is_odd(number)
short number;
{
int result = 0;
result = number % 2;
return(result);
} /* ends is_odd */
/* End of File */