mirror of
https://git.code.sf.net/p/libpng/code.git
synced 2025-07-10 18:04:09 +02:00
Imported from libpng-0.82.tar
This commit is contained in:
committed by
Glenn Randers-Pehrson
parent
51f0eb4584
commit
0f71645dfe
241
pngtest.c
241
pngtest.c
@@ -19,7 +19,7 @@
|
||||
|
||||
/* input and output filenames */
|
||||
char inname[] = "pngtest.png";
|
||||
char outname[] = "pngout.png";
|
||||
char outname[] = "testout.png";
|
||||
|
||||
png_struct read_ptr;
|
||||
png_struct write_ptr;
|
||||
@@ -30,13 +30,13 @@ char inbuf[256], outbuf[256];
|
||||
|
||||
int main()
|
||||
{
|
||||
FILE *fpin, *fpout;
|
||||
png_byte *row_buf;
|
||||
png_uint_32 rowbytes;
|
||||
FILE *fpin, *fpout;
|
||||
png_byte *row_buf;
|
||||
png_uint_32 rowbytes;
|
||||
png_uint_32 y;
|
||||
int channels, num_pass, pass;
|
||||
int channels, num_pass, pass;
|
||||
|
||||
row_buf = (png_byte *)0;
|
||||
row_buf = (png_byte *)0;
|
||||
|
||||
fprintf(STDERR, "Testing libpng version %s\n", PNG_LIBPNG_VER_STRING);
|
||||
|
||||
@@ -48,142 +48,145 @@ int main()
|
||||
fprintf(STDERR, " png.c version: %s\n\n", png_libpng_ver);
|
||||
}
|
||||
|
||||
fpin = fopen(inname, "rb");
|
||||
if (!fpin)
|
||||
{
|
||||
fprintf(STDERR, "Could not find input file %s\n", inname);
|
||||
return 1;
|
||||
}
|
||||
fpin = fopen(inname, "rb");
|
||||
if (!fpin)
|
||||
{
|
||||
fprintf(STDERR, "Could not find input file %s\n", inname);
|
||||
return 1;
|
||||
}
|
||||
|
||||
fpout = fopen(outname, "wb");
|
||||
if (!fpout)
|
||||
{
|
||||
fprintf(STDERR, "could not open output file %s\n", outname);
|
||||
fclose(fpin);
|
||||
return 1;
|
||||
}
|
||||
fpout = fopen(outname, "wb");
|
||||
if (!fpout)
|
||||
{
|
||||
fprintf(STDERR, "could not open output file %s\n", outname);
|
||||
fclose(fpin);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (setjmp(read_ptr.jmpbuf))
|
||||
{
|
||||
fprintf(STDERR, "libpng read error\n");
|
||||
fclose(fpin);
|
||||
fclose(fpout);
|
||||
return 1;
|
||||
}
|
||||
if (setjmp(read_ptr.jmpbuf))
|
||||
{
|
||||
fprintf(STDERR, "libpng read error\n");
|
||||
fclose(fpin);
|
||||
fclose(fpout);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (setjmp(write_ptr.jmpbuf))
|
||||
{
|
||||
fprintf(STDERR, "libpng write error\n");
|
||||
fclose(fpin);
|
||||
fclose(fpout);
|
||||
return 1;
|
||||
}
|
||||
if (setjmp(write_ptr.jmpbuf))
|
||||
{
|
||||
fprintf(STDERR, "libpng write error\n");
|
||||
fclose(fpin);
|
||||
fclose(fpout);
|
||||
return 1;
|
||||
}
|
||||
|
||||
png_read_init(&read_ptr);
|
||||
png_write_init(&write_ptr);
|
||||
png_info_init(&info_ptr);
|
||||
png_info_init(&end_info);
|
||||
png_info_init(&info_ptr);
|
||||
png_info_init(&end_info);
|
||||
png_read_init(&read_ptr);
|
||||
png_write_init(&write_ptr);
|
||||
|
||||
png_init_io(&read_ptr, fpin);
|
||||
png_init_io(&write_ptr, fpout);
|
||||
png_init_io(&read_ptr, fpin);
|
||||
png_init_io(&write_ptr, fpout);
|
||||
|
||||
png_read_info(&read_ptr, &info_ptr);
|
||||
png_write_info(&write_ptr, &info_ptr);
|
||||
png_read_info(&read_ptr, &info_ptr);
|
||||
png_write_info(&write_ptr, &info_ptr);
|
||||
|
||||
if ((info_ptr.color_type & 3) == 2)
|
||||
channels = 3;
|
||||
else
|
||||
channels = 1;
|
||||
if (info_ptr.color_type & 4)
|
||||
channels++;
|
||||
if ((info_ptr.color_type & 3) == 2)
|
||||
channels = 3;
|
||||
else
|
||||
channels = 1;
|
||||
if (info_ptr.color_type & 4)
|
||||
channels++;
|
||||
|
||||
rowbytes = ((info_ptr.width * info_ptr.bit_depth * channels + 7) >> 3);
|
||||
row_buf = (png_byte *)malloc((size_t)rowbytes);
|
||||
if (!row_buf)
|
||||
{
|
||||
fprintf(STDERR, "no memory to allocate row buffer\n");
|
||||
png_read_destroy(&read_ptr, &info_ptr, (png_info *)0);
|
||||
png_write_destroy(&write_ptr);
|
||||
fclose(fpin);
|
||||
fclose(fpout);
|
||||
return 1;
|
||||
}
|
||||
png_set_flush(&write_ptr, 20);
|
||||
png_set_compression_level(&write_ptr, 9);
|
||||
|
||||
if (info_ptr.interlace_type)
|
||||
{
|
||||
num_pass = png_set_interlace_handling(&read_ptr);
|
||||
num_pass = png_set_interlace_handling(&write_ptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
num_pass = 1;
|
||||
}
|
||||
rowbytes = ((info_ptr.width * info_ptr.bit_depth * channels + 7) >> 3);
|
||||
row_buf = (png_byte *)malloc((size_t)rowbytes);
|
||||
if (!row_buf)
|
||||
{
|
||||
fprintf(STDERR, "no memory to allocate row buffer\n");
|
||||
png_read_destroy(&read_ptr, &info_ptr, (png_info *)0);
|
||||
png_write_destroy(&write_ptr);
|
||||
fclose(fpin);
|
||||
fclose(fpout);
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (pass = 0; pass < num_pass; pass++)
|
||||
{
|
||||
for (y = 0; y < info_ptr.height; y++)
|
||||
{
|
||||
png_read_rows(&read_ptr, (png_bytef **)&row_buf, (png_bytef **)0, 1);
|
||||
png_write_rows(&write_ptr, (png_bytef **)&row_buf, 1);
|
||||
}
|
||||
}
|
||||
if (info_ptr.interlace_type)
|
||||
{
|
||||
num_pass = png_set_interlace_handling(&read_ptr);
|
||||
num_pass = png_set_interlace_handling(&write_ptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
num_pass = 1;
|
||||
}
|
||||
|
||||
png_read_end(&read_ptr, &end_info);
|
||||
png_write_end(&write_ptr, &end_info);
|
||||
for (pass = 0; pass < num_pass; pass++)
|
||||
{
|
||||
for (y = 0; y < info_ptr.height; y++)
|
||||
{
|
||||
png_read_rows(&read_ptr, (png_bytef **)&row_buf, (png_bytef **)0, 1);
|
||||
png_write_rows(&write_ptr, (png_bytef **)&row_buf, 1);
|
||||
}
|
||||
}
|
||||
|
||||
png_read_destroy(&read_ptr, &info_ptr, &end_info);
|
||||
png_write_destroy(&write_ptr);
|
||||
png_read_end(&read_ptr, &end_info);
|
||||
png_write_end(&write_ptr, &end_info);
|
||||
|
||||
fclose(fpin);
|
||||
fclose(fpout);
|
||||
png_read_destroy(&read_ptr, &info_ptr, &end_info);
|
||||
png_write_destroy(&write_ptr);
|
||||
|
||||
free(row_buf);
|
||||
fclose(fpin);
|
||||
fclose(fpout);
|
||||
|
||||
fpin = fopen(inname, "rb");
|
||||
free(row_buf);
|
||||
|
||||
if (!fpin)
|
||||
{
|
||||
fprintf(STDERR, "could not find file %s\n", inname);
|
||||
return 1;
|
||||
}
|
||||
fpin = fopen(inname, "rb");
|
||||
|
||||
fpout = fopen(outname, "rb");
|
||||
if (!fpout)
|
||||
{
|
||||
fprintf(STDERR, "could not find file %s\n", outname);
|
||||
fclose(fpin);
|
||||
return 1;
|
||||
}
|
||||
if (!fpin)
|
||||
{
|
||||
fprintf(STDERR, "could not find file %s\n", inname);
|
||||
return 1;
|
||||
}
|
||||
|
||||
while (1)
|
||||
{
|
||||
int num_in, num_out;
|
||||
fpout = fopen(outname, "rb");
|
||||
if (!fpout)
|
||||
{
|
||||
fprintf(STDERR, "could not find file %s\n", outname);
|
||||
fclose(fpin);
|
||||
return 1;
|
||||
}
|
||||
|
||||
num_in = fread(inbuf, 1, 256, fpin);
|
||||
num_out = fread(outbuf, 1, 256, fpout);
|
||||
while (1)
|
||||
{
|
||||
int num_in, num_out;
|
||||
|
||||
if (num_in != num_out)
|
||||
{
|
||||
fprintf(STDERR, "files are of a different size\n");
|
||||
fclose(fpin);
|
||||
fclose(fpout);
|
||||
return 1;
|
||||
}
|
||||
num_in = fread(inbuf, 1, 256, fpin);
|
||||
num_out = fread(outbuf, 1, 256, fpout);
|
||||
|
||||
if (!num_in)
|
||||
break;
|
||||
if (num_in != num_out)
|
||||
{
|
||||
fprintf(STDERR, "files are of a different size\n");
|
||||
fclose(fpin);
|
||||
fclose(fpout);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (memcmp(inbuf, outbuf, num_in))
|
||||
{
|
||||
fprintf(STDERR, "files are different\n");
|
||||
fclose(fpin);
|
||||
fclose(fpout);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
if (!num_in)
|
||||
break;
|
||||
|
||||
fclose(fpin);
|
||||
fclose(fpout);
|
||||
if (memcmp(inbuf, outbuf, num_in))
|
||||
{
|
||||
fprintf(STDERR, "files are different\n");
|
||||
fclose(fpin);
|
||||
fclose(fpout);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(fpin);
|
||||
fclose(fpout);
|
||||
fprintf(STDERR, "libpng passes test\n");
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user