5cc70674e4
From-SVN: r19679
130 lines
4.0 KiB
C
130 lines
4.0 KiB
C
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);
|
|
}
|