⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pngtest.c

📁 Linux下的基于X11的图形开发环境。
💻 C
📖 第 1 页 / 共 3 页
字号:
      {         png_size_t i;         png_set_unknown_chunks(write_ptr, write_info_ptr, unknowns,           num_unknowns);         /* copy the locations from the read_info_ptr.  The automatically            generated locations in write_info_ptr are wrong because we            haven't written anything yet */         for (i = 0; i < (png_size_t)num_unknowns; i++)           png_set_unknown_chunk_location(write_ptr, write_info_ptr, i,             unknowns[i].location);      }   }#endif#ifdef PNG_WRITE_SUPPORTED   png_debug(0, "\nWriting info struct\n");/* If we wanted, we could write info in two steps:   png_write_info_before_PLTE(write_ptr, write_info_ptr); */   png_write_info(write_ptr, write_info_ptr);#endif#ifdef SINGLE_ROWBUF_ALLOC   png_debug(0, "\nAllocating row buffer...");   row_buf = (png_bytep)png_malloc(read_ptr,      png_get_rowbytes(read_ptr, read_info_ptr));   png_debug1(0, "0x%08lx\n\n", (unsigned long)row_buf);#endif /* SINGLE_ROWBUF_ALLOC */   png_debug(0, "Writing row data\n");#if defined(PNG_READ_INTERLACING_SUPPORTED) || \  defined(PNG_WRITE_INTERLACING_SUPPORTED)   num_pass = png_set_interlace_handling(read_ptr);#  ifdef PNG_WRITE_SUPPORTED   png_set_interlace_handling(write_ptr);#  endif#else   num_pass=1;#endif#ifdef PNGTEST_TIMING   t_stop = (float)clock();   t_misc += (t_stop - t_start);   t_start = t_stop;#endif   for (pass = 0; pass < num_pass; pass++)   {      png_debug1(0, "Writing row data for pass %d\n",pass);      for (y = 0; y < height; y++)      {#ifndef SINGLE_ROWBUF_ALLOC         png_debug2(0, "\nAllocating row buffer (pass %d, y = %ld)...", pass,y);         row_buf = (png_bytep)png_malloc(read_ptr,            png_get_rowbytes(read_ptr, read_info_ptr));         png_debug2(0, "0x%08lx (%ld bytes)\n", (unsigned long)row_buf,            png_get_rowbytes(read_ptr, read_info_ptr));#endif /* !SINGLE_ROWBUF_ALLOC */         png_read_rows(read_ptr, (png_bytepp)&row_buf, png_bytepp_NULL, 1);#ifdef PNG_WRITE_SUPPORTED#ifdef PNGTEST_TIMING         t_stop = (float)clock();         t_decode += (t_stop - t_start);         t_start = t_stop;#endif         png_write_rows(write_ptr, (png_bytepp)&row_buf, 1);#ifdef PNGTEST_TIMING         t_stop = (float)clock();         t_encode += (t_stop - t_start);         t_start = t_stop;#endif#endif /* PNG_WRITE_SUPPORTED */#ifndef SINGLE_ROWBUF_ALLOC         png_debug2(0, "Freeing row buffer (pass %d, y = %ld)\n\n", pass, y);         png_free(read_ptr, row_buf);#endif /* !SINGLE_ROWBUF_ALLOC */      }   }#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)   png_free_data(read_ptr, read_info_ptr, PNG_FREE_UNKN, -1);#endif#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)   png_free_data(write_ptr, write_info_ptr, PNG_FREE_UNKN, -1);#endif   png_debug(0, "Reading and writing end_info data\n");   png_read_end(read_ptr, end_info_ptr);#if defined(PNG_TEXT_SUPPORTED)   {      png_textp text_ptr;      int num_text;      if (png_get_text(read_ptr, end_info_ptr, &text_ptr, &num_text) > 0)      {         png_debug1(0, "Handling %d iTXt/tEXt/zTXt chunks\n", num_text);         png_set_text(write_ptr, write_end_info_ptr, text_ptr, num_text);      }   }#endif#if defined(PNG_tIME_SUPPORTED)   {      png_timep mod_time;      if (png_get_tIME(read_ptr, end_info_ptr, &mod_time))      {         png_set_tIME(write_ptr, write_end_info_ptr, mod_time);#if defined(PNG_TIME_RFC1123_SUPPORTED)         /* we have to use png_strcpy instead of "=" because the string            pointed to by png_convert_to_rfc1123() gets free'ed before            we use it */         png_strcpy(tIME_string,png_convert_to_rfc1123(read_ptr, mod_time));         tIME_chunk_present++;#endif /* PNG_TIME_RFC1123_SUPPORTED */      }   }#endif#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)   {      png_unknown_chunkp unknowns;      int num_unknowns;      num_unknowns = (int)png_get_unknown_chunks(read_ptr, end_info_ptr,         &unknowns);      if (num_unknowns)      {         png_size_t i;         png_set_unknown_chunks(write_ptr, write_end_info_ptr, unknowns,           num_unknowns);         /* copy the locations from the read_info_ptr.  The automatically            generated locations in write_end_info_ptr are wrong because we            haven't written the end_info yet */         for (i = 0; i < (png_size_t)num_unknowns; i++)           png_set_unknown_chunk_location(write_ptr, write_end_info_ptr, i,             unknowns[i].location);      }   }#endif#ifdef PNG_WRITE_SUPPORTED   png_write_end(write_ptr, write_end_info_ptr);#endif#ifdef PNG_EASY_ACCESS_SUPPORTED   if(verbose)   {      png_uint_32 iwidth, iheight;      iwidth = png_get_image_width(write_ptr, write_info_ptr);      iheight = png_get_image_height(write_ptr, write_info_ptr);      fprintf(STDERR, "Image width = %lu, height = %lu\n",         iwidth, iheight);   }#endif   png_debug(0, "Destroying data structs\n");#ifdef SINGLE_ROWBUF_ALLOC   png_debug(1, "destroying row_buf for read_ptr\n");   png_free(read_ptr, row_buf);   row_buf=NULL;#endif /* SINGLE_ROWBUF_ALLOC */   png_debug(1, "destroying read_ptr, read_info_ptr, end_info_ptr\n");   png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr);#ifdef PNG_WRITE_SUPPORTED   png_debug(1, "destroying write_end_info_ptr\n");   png_destroy_info_struct(write_ptr, &write_end_info_ptr);   png_debug(1, "destroying write_ptr, write_info_ptr\n");   png_destroy_write_struct(&write_ptr, &write_info_ptr);#endif   png_debug(0, "Destruction complete.\n");   FCLOSE(fpin);   FCLOSE(fpout);   png_debug(0, "Opening files for comparison\n");#if defined(_WIN32_WCE)   MultiByteToWideChar(CP_ACP, 0, inname, -1, path, MAX_PATH);   if ((fpin = CreateFile(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)#else   if ((fpin = fopen(inname, "rb")) == NULL)#endif   {      fprintf(STDERR, "Could not find file %s\n", inname);      return (1);   }#if defined(_WIN32_WCE)   MultiByteToWideChar(CP_ACP, 0, outname, -1, path, MAX_PATH);   if ((fpout = CreateFile(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)#else   if ((fpout = fopen(outname, "rb")) == NULL)#endif   {      fprintf(STDERR, "Could not find file %s\n", outname);      FCLOSE(fpin);      return (1);   }   for(;;)   {      png_size_t num_in, num_out;      READFILE(fpin, inbuf, 1, num_in);      READFILE(fpout, outbuf, 1, num_out);      if (num_in != num_out)      {         fprintf(STDERR, "\nFiles %s and %s are of a different size\n",                 inname, outname);         if(wrote_question == 0)         {            fprintf(STDERR,         "   Was %s written with the same maximum IDAT chunk size (%d bytes),",              inname,PNG_ZBUF_SIZE);            fprintf(STDERR,              "\n   filtering heuristic (libpng default), compression");            fprintf(STDERR,              " level (zlib default),\n   and zlib version (%s)?\n\n",              ZLIB_VERSION);            wrote_question=1;         }         FCLOSE(fpin);         FCLOSE(fpout);         return (0);      }      if (!num_in)         break;      if (png_memcmp(inbuf, outbuf, num_in))      {         fprintf(STDERR, "\nFiles %s and %s are different\n", inname, outname);         if(wrote_question == 0)         {            fprintf(STDERR,         "   Was %s written with the same maximum IDAT chunk size (%d bytes),",                 inname,PNG_ZBUF_SIZE);            fprintf(STDERR,              "\n   filtering heuristic (libpng default), compression");            fprintf(STDERR,              " level (zlib default),\n   and zlib version (%s)?\n\n",              ZLIB_VERSION);            wrote_question=1;         }         FCLOSE(fpin);         FCLOSE(fpout);         return (0);      }   }   FCLOSE(fpin);   FCLOSE(fpout);   return (0);}/* input and output filenames */#ifdef RISCOSstatic PNG_CONST char *inname = "pngtest/png";static PNG_CONST char *outname = "pngout/png";#elsestatic PNG_CONST char *inname = "pngtest.png";static PNG_CONST char *outname = "pngout.png";#endifintmain(int argc, char *argv[]){   int multiple = 0;   int ierror = 0;   fprintf(STDERR, "Testing libpng version %s\n", PNG_LIBPNG_VER_STRING);   fprintf(STDERR, "   with zlib   version %s\n", ZLIB_VERSION);   fprintf(STDERR,"%s",png_get_copyright(NULL));   /* Show the version of libpng used in building the library */   fprintf(STDERR," library (%lu):%s", png_access_version_number(),      png_get_header_version(NULL));   /* Show the version of libpng used in building the application */   fprintf(STDERR," pngtest (%lu):%s", (unsigned long)PNG_LIBPNG_VER,      PNG_HEADER_VERSION_STRING);   fprintf(STDERR," sizeof(png_struct)=%ld, sizeof(png_info)=%ld\n",                    (long)sizeof(png_struct), (long)sizeof(png_info));   /* Do some consistency checking on the memory allocation settings, I'm      not sure this matters, but it is nice to know, the first of these      tests should be impossible because of the way the macros are set      in pngconf.h */#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K)      fprintf(STDERR, " NOTE: Zlib compiled for max 64k, libpng not\n");#endif   /* I think the following can happen. */#if !defined(MAXSEG_64K) && defined(PNG_MAX_MALLOC_64K)      fprintf(STDERR, " NOTE: libpng compiled for max 64k, zlib not\n");#endif   if (strcmp(png_libpng_ver, PNG_LIBPNG_VER_STRING))   {      fprintf(STDERR,         "Warning: versions are different between png.h and png.c\n");      fprintf(STDERR, "  png.h version: %s\n", PNG_LIBPNG_VER_STRING);      fprintf(STDERR, "  png.c version: %s\n\n", png_libpng_ver);      ++ierror;   }   if (argc > 1)   {      if (strcmp(argv[1], "-m") == 0)      {         multiple = 1;         status_dots_requested = 0;      }      else if (strcmp(argv[1], "-mv") == 0 ||               strcmp(argv[1], "-vm") == 0 )      {         multiple = 1;         verbose = 1;         status_dots_requested = 1;      }      else if (strcmp(argv[1], "-v") == 0)      {         verbose = 1;         status_dots_requested = 1;         inname = argv[2];      }      else      {         inname = argv[1];         status_dots_requested = 0;      }   }   if (!multiple && argc == 3+verbose)     outname = argv[2+verbose];   if ((!multiple && argc > 3+verbose) || (multiple && argc < 2))   {     fprintf(STDERR,       "usage: %s [infile.png] [outfile.png]\n\t%s -m {infile.png}\n",        argv[0], argv[0]);     fprintf(STDERR,       "  reads/writes one PNG file (without -m) or multiple files (-m)\n");     fprintf(STDERR,       "  with -m %s is used as a temporary file\n", outname);     exit(1);   }   if (multiple)   {      int i;#ifdef PNG_USER_MEM_SUPPORTED      int allocation_now = current_allocation;#endif      for (i=2; i<argc; ++i)      {#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)         int k;#endif         int kerror;         fprintf(STDERR, "Testing %s:",argv[i]);         kerror = test_one_file(argv[i], outname);         if (kerror == 0)         {#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)            fprintf(STDERR, "\n PASS (%lu zero samples)\n",zero_samples);#else            fprintf(STDERR, " PASS\n");#endif#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)            for (k=0; k<256; k++)               if(filters_used[k])                  fprintf(STDERR, " Filter %d was used %lu times\n",                     k,filters_used[k]);#endif#if defined(PNG_TIME_RFC1123_SUPPORTED)         if(tIME_chunk_present != 0)            fprintf(STDERR, " tIME = %s\n",tIME_string);         tIME_chunk_present = 0;#endif /* PNG_TIME_RFC1123_SUPPORTED */         }         else         {            fprintf(STDERR, " FAIL\n");            ierror += kerror;         }#ifdef PNG_USER_MEM_SUPPORTED         if (allocation_now != current_allocation)            fprintf(STDERR, "MEMORY ERROR: %d bytes lost\n",               current_allocation-allocation_now);         if (current_allocation != 0)         {            memory_infop pinfo = pinformation;            fprintf(STDERR, "MEMORY ERROR: %d bytes still allocated\n",               current_allocation);            while (pinfo != NULL)            {               fprintf(STDERR, " %lu bytes at %x\n", pinfo->size,                  (unsigned int) pinfo->pointer);               pinfo = pinfo->next;            }         }#endif      }#ifdef PNG_USER_MEM_SUPPORTED         fprintf(STDERR, " Current memory allocation: %10d bytes\n",            current_allocation);         fprintf(STDERR, " Maximum memory allocation: %10d bytes\n",            maximum_allocation);         fprintf(STDERR, " Total   memory allocation: %10d bytes\n",            total_allocation);         fprintf(STDERR, "     Number of allocations: %10d\n",            num_allocations);#endif   }   else   {      int i;      for (i=0; i<3; ++i)      {         int kerror;#ifdef PNG_USER_MEM_SUPPORTED         int allocation_now = current_allocation;#endif         if (i == 1) status_dots_requested = 1;         else if(verbose == 0)status_dots_requested = 0;         if (i == 0 || verbose == 1 || ierror != 0)            fprintf(STDERR, "Testing %s:",inname);         kerror = test_one_file(inname, outname);         if(kerror == 0)         {            if(verbose == 1 || i == 2)            {#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)                int k;#endif#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)                fprintf(STDERR, "\n PASS (%lu zero samples)\n",zero_samples);#else                fprintf(STDERR, " PASS\n");#endif#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)                for (k=0; k<256; k++)                   if(filters_used[k])                      fprintf(STDERR, " Filter %d was used %lu times\n",                         k,filters_used[k]);#endif#if defined(PNG_TIME_RFC1123_SUPPORTED)             if(tIME_chunk_present != 0)                fprintf(STDERR, " tIME = %s\n",tIME_string);#endif /* PNG_TIME_RFC1123_SUPPORTED */            }         }         else         {            if(verbose == 0 && i != 2)               fprintf(STDERR, "Testing %s:",inname);            fprintf(STDERR, " FAIL\n");            ierror += kerror;         }#ifdef PNG_USER_MEM_SUPPORTED         if (allocation_now != current_allocation)             fprintf(STDERR, "MEMORY ERROR: %d bytes lost\n",               current_allocation-allocation_now);         if (current_allocation != 0)         {             memory_infop pinfo = pinformation;             fprintf(STDERR, "MEMORY ERROR: %d bytes still allocated\n",                current_allocation);             while (pinfo != NULL)             {                fprintf(STDERR," %lu bytes at %x\n",                   pinfo->size, (unsigned int)pinfo->pointer);                pinfo = pinfo->next;             }          }#endif       }#ifdef PNG_USER_MEM_SUPPORTED       fprintf(STDERR, " Current memory allocation: %10d bytes\n",          current_allocation);       fprintf(STDERR, " Maximum memory allocation: %10d bytes\n",          maximum_allocation);       fprintf(STDERR, " Total   memory allocation: %10d bytes\n",          total_allocation);       fprintf(STDERR, "     Number of allocations: %10d\n",            num_allocations);#endif   }#ifdef PNGTEST_TIMING   t_stop = (float)clock();   t_misc += (t_stop - t_start);   t_start = t_stop;   fprintf(STDERR," CPU time used = %.3f seconds",      (t_misc+t_decode+t_encode)/(float)CLOCKS_PER_SEC);   fprintf(STDERR," (decoding %.3f,\n",      t_decode/(float)CLOCKS_PER_SEC);   fprintf(STDERR,"        encoding %.3f ,",      t_encode/(float)CLOCKS_PER_SEC);   fprintf(STDERR," other %.3f seconds)\n\n",      t_misc/(float)CLOCKS_PER_SEC);#endif   if (ierror == 0)      fprintf(STDERR, "libpng passes test\n");   else      fprintf(STDERR, "libpng FAILS test\n");   return (int)(ierror != 0);}/* Generate a compiler error if there is an old png.h in the search path. */typedef version_1_2_5 your_png_h_is_not_version_1_2_5;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -