typedef struct _RunlengthPacket { unsigned short red, green, blue, length; unsigned short index; } RunlengthPacket; typedef struct _Image { int status, temporary; char filename[1664 ]; long int filesize; int pipe; char magick[1664 ], *comments, *label, *text; unsigned int matte; unsigned int columns, rows, depth; unsigned int scene, number_scenes; char *montage, *directory; unsigned int colors; double gamma; float x_resolution, y_resolution; unsigned int mean_error_per_pixel; double normalized_mean_error, normalized_maximum_error; unsigned long total_colors; char *signature; unsigned int packets, runlength, packet_size; unsigned char *packed_pixels; long int magick_time; char magick_filename[1664 ]; unsigned int magick_columns, magick_rows; char *geometry, *page; unsigned int dispose, delay, iterations; unsigned int orphan; struct _Image *previous, *list, *next; } Image; Image *MinifyImage(Image *image) { Image *minified_image; register RunlengthPacket *q, *s, *s0, *s1, *s2, *s3; register unsigned int x; unsigned int blue, green, red; unsigned long total_matte, total_blue, total_green, total_red; unsigned short index; for (x=0; x < (image->columns-1); x+=2) { total_red=0; total_green=0; total_blue=0; total_matte=0; s=s0; total_red+=( 3 )*(s->red); total_green+=( 3 )*(s->green); total_blue+=( 3 )*(s->blue); total_matte+=( 3 )*(s->index); s++; ; total_red+=( 7 )*(s->red); total_green+=( 7 )*(s->green); total_blue+=( 7 )*(s->blue); total_matte+=( 7 )*(s->index); s++; ; total_red+=( 7 )*(s->red); total_green+=( 7 )*(s->green); total_blue+=( 7 )*(s->blue); total_matte+=( 7 )*(s->index); s++; ; total_red+=( 3 )*(s->red); total_green+=( 3 )*(s->green); total_blue+=( 3 )*(s->blue); total_matte+=( 3 )*(s->index); s++; ; s=s1; total_red+=( 7 )*(s->red); total_green+=( 7 )*(s->green); total_blue+=( 7 )*(s->blue); total_matte+=( 7 )*(s->index); s++; ; total_red+=( 15 )*(s->red); total_green+=( 15 )*(s->green); total_blue+=( 15 )*(s->blue); total_matte+=( 15 )*(s->index); s++; ; total_red+=( 15 )*(s->red); total_green+=( 15 )*(s->green); total_blue+=( 15 )*(s->blue); total_matte+=( 15 )*(s->index); s++; ; total_red+=( 7 )*(s->red); total_green+=( 7 )*(s->green); total_blue+=( 7 )*(s->blue); total_matte+=( 7 )*(s->index); s++; ; s=s2; total_red+=( 7 )*(s->red); total_green+=( 7 )*(s->green); total_blue+=( 7 )*(s->blue); total_matte+=( 7 )*(s->index); s++; ; total_red+=( 15 )*(s->red); total_green+=( 15 )*(s->green); total_blue+=( 15 )*(s->blue); total_matte+=( 15 )*(s->index); s++; ; total_red+=( 15 )*(s->red); total_green+=( 15 )*(s->green); total_blue+=( 15 )*(s->blue); total_matte+=( 15 )*(s->index); s++; ; total_red+=( 7 )*(s->red); total_green+=( 7 )*(s->green); total_blue+=( 7 )*(s->blue); total_matte+=( 7 )*(s->index); s++; ; s=s3; total_red+=( 3 )*(s->red); total_green+=( 3 )*(s->green); total_blue+=( 3 )*(s->blue); total_matte+=( 3 )*(s->index); s++; ; total_red+=( 7 )*(s->red); total_green+=( 7 )*(s->green); total_blue+=( 7 )*(s->blue); total_matte+=( 7 )*(s->index); s++; ; total_red+=( 7 )*(s->red); total_green+=( 7 )*(s->green); total_blue+=( 7 )*(s->blue); total_matte+=( 7 )*(s->index); s++; ; total_red+=( 3 )*(s->red); total_green+=( 3 )*(s->green); total_blue+=( 3 )*(s->blue); total_matte+=( 3 )*(s->index); s++; ; red=(unsigned short) ((total_red+63) >> 7); green=(unsigned short) ((total_green+63) >> 7); blue=(unsigned short) ((total_blue+63) >> 7); index=(unsigned short) ((total_matte+63) >> 7); if ((red == q->red) && (green == q->green) && (blue == q->blue) && (index == q->index) && ((int) q->length < 65535L )) q->length++; } return(minified_image); }