pngtest.c
Upload User: zlh9724
Upload Date: 2007-01-04
Package Size: 1991k
Code Size: 4k
Category:

Browser Client

Development Platform:

Unix_Linux

  1. /* pngtest.c - a simple test program to test libpng
  2. libpng 1.0 beta 2 - version 0.87
  3.    For conditions of distribution and use, see copyright notice in png.h
  4. Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
  5.    January 15, 1996
  6. */
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include "png.h"
  10. #ifdef __TURBOC__
  11. #include <mem.h>
  12. #endif
  13. /* defined so I can write to a file on gui/windowing platforms */
  14. /*  #define STDERR stderr  */
  15. #define STDERR stdout /* for DOS */
  16. /* input and output filenames */
  17. char inname[] = "pngtest.png";
  18. char outname[] = "pngout.png";
  19. png_struct read_ptr;
  20. png_struct write_ptr;
  21. png_info info_ptr;
  22. png_info end_info;
  23. char inbuf[256], outbuf[256];
  24. int main()
  25. {
  26.    FILE *fpin, *fpout;
  27. png_bytep row_buf;
  28.    png_byte * near_row_buf;
  29.    png_uint_32 rowbytes;
  30.    png_uint_32 y;
  31.    int channels, num_pass, pass;
  32. row_buf = (png_bytep)0;
  33.    near_row_buf = (png_byte *)0;
  34.    fprintf(STDERR, "Testing libpng version %sn", PNG_LIBPNG_VER_STRING);
  35.    if (strcmp(png_libpng_ver, PNG_LIBPNG_VER_STRING))
  36.    {
  37.       fprintf(STDERR,
  38.          "Warning: versions are different between png.h and png.cn");
  39.       fprintf(STDERR, "  png.h version: %sn", PNG_LIBPNG_VER_STRING);
  40.       fprintf(STDERR, "  png.c version: %snn", png_libpng_ver);
  41.    }
  42.    fpin = fopen(inname, "rb");
  43.    if (!fpin)
  44.    {
  45.       fprintf(STDERR, "Could not find input file %sn", inname);
  46.       return 1;
  47.    }
  48.    fpout = fopen(outname, "wb");
  49.    if (!fpout)
  50.    {
  51.       fprintf(STDERR, "could not open output file %sn", outname);
  52.       fclose(fpin);
  53.       return 1;
  54.    }
  55.    if (setjmp(read_ptr.jmpbuf))
  56.    {
  57.       fprintf(STDERR, "libpng read errorn");
  58.       fclose(fpin);
  59.       fclose(fpout);
  60.       return 1;
  61.    }
  62.    if (setjmp(write_ptr.jmpbuf))
  63. {
  64.       fprintf(STDERR, "libpng write errorn");
  65.       fclose(fpin);
  66.       fclose(fpout);
  67.       return 1;
  68.    }
  69.    png_read_init(&read_ptr);
  70.    png_write_init(&write_ptr);
  71.    png_info_init(&info_ptr);
  72.    png_info_init(&end_info);
  73.    png_init_io(&read_ptr, fpin);
  74.    png_init_io(&write_ptr, fpout);
  75.    png_read_info(&read_ptr, &info_ptr);
  76.    png_write_info(&write_ptr, &info_ptr);
  77. if ((info_ptr.color_type & 3) == 2)
  78.       channels = 3;
  79.    else
  80.       channels = 1;
  81.    if (info_ptr.color_type & 4)
  82.       channels++;
  83.    rowbytes = ((info_ptr.width * info_ptr.bit_depth * channels + 7) >> 3);
  84. near_row_buf = (png_byte *)malloc((size_t)rowbytes);
  85.    row_buf = (png_bytep)near_row_buf;
  86.    if (!row_buf)
  87.    {
  88.       fprintf(STDERR, "no memory to allocate row buffern");
  89.       png_read_destroy(&read_ptr, &info_ptr, (png_infop )0);
  90.       png_write_destroy(&write_ptr);
  91.       fclose(fpin);
  92.       fclose(fpout);
  93.       return 1;
  94.    }
  95.    if (info_ptr.interlace_type)
  96.    {
  97.       num_pass = png_set_interlace_handling(&read_ptr);
  98.       num_pass = png_set_interlace_handling(&write_ptr);
  99.    }
  100.    else
  101.    {
  102.       num_pass = 1;
  103.    }
  104.    for (pass = 0; pass < num_pass; pass++)
  105.    {
  106.       for (y = 0; y < info_ptr.height; y++)
  107.       {
  108. #ifdef TESTING
  109.          fprintf(STDERR, "Processing line #%ldn", y);
  110. #endif
  111. png_read_rows(&read_ptr, (png_bytepp)&row_buf, (png_bytepp)0, 1);
  112. png_write_rows(&write_ptr, (png_bytepp)&row_buf, 1);
  113.       }
  114.    }
  115.    png_read_end(&read_ptr, &end_info);
  116.    png_write_end(&write_ptr, &end_info);
  117.    png_read_destroy(&read_ptr, &info_ptr, &end_info);
  118.    png_write_destroy(&write_ptr);
  119.    fclose(fpin);
  120.    fclose(fpout);
  121.    free((void *)near_row_buf);
  122.    fpin = fopen(inname, "rb");
  123.    if (!fpin)
  124.    {
  125.       fprintf(STDERR, "could not find file %sn", inname);
  126.       return 1;
  127.    }
  128.    fpout = fopen(outname, "rb");
  129.    if (!fpout)
  130.    {
  131.       fprintf(STDERR, "could not find file %sn", outname);
  132.       fclose(fpin);
  133.       return 1;
  134.    }
  135.    while (1)
  136.    {
  137.       int num_in, num_out;
  138.       num_in = fread(inbuf, 1, 256, fpin);
  139.       num_out = fread(outbuf, 1, 256, fpout);
  140.       if (num_in != num_out)
  141.       {
  142.          fprintf(STDERR, "files are of a different sizen");
  143.          fclose(fpin);
  144.          fclose(fpout);
  145.          return 1;
  146.       }
  147.       if (!num_in)
  148.          break;
  149.       if (memcmp(inbuf, outbuf, num_in))
  150.       {
  151.          fprintf(STDERR, "files are differentn");
  152.          fclose(fpin);
  153.          fclose(fpout);
  154.          return 1;
  155.       }
  156.    }
  157.    fclose(fpin);
  158.    fclose(fpout);
  159.    fprintf(STDERR, "libpng passes testn");
  160.    return 0;
  161. }