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

📄 pngtest.c

📁 Linux下的基于X11的图形开发环境。
💻 C
📖 第 1 页 / 共 3 页
字号:
      pinfo->size = size;      current_allocation += size;      total_allocation += size;      num_allocations ++;      if (current_allocation > maximum_allocation)         maximum_allocation = current_allocation;      pinfo->pointer = (png_voidp)png_malloc_default(png_ptr, size);      pinfo->next = pinformation;      pinformation = pinfo;      /* Make sure the caller isn't assuming zeroed memory. */      png_memset(pinfo->pointer, 0xdd, pinfo->size);#if PNG_DEBUG      if(verbose)         printf("png_malloc %lu bytes at %x\n",size,pinfo->pointer);#endif      assert(pinfo->size != 12345678);      return (png_voidp)(pinfo->pointer);   }}/* Free a pointer.  It is removed from the list at the same time. */voidpng_debug_free(png_structp png_ptr, png_voidp ptr){   if (png_ptr == NULL)      fprintf(STDERR, "NULL pointer to png_debug_free.\n");   if (ptr == 0)   {#if 0 /* This happens all the time. */      fprintf(STDERR, "WARNING: freeing NULL pointer\n");#endif      return;   }   /* Unlink the element from the list. */   {      memory_infop FAR *ppinfo = &pinformation;      for (;;)      {         memory_infop pinfo = *ppinfo;         if (pinfo->pointer == ptr)         {            *ppinfo = pinfo->next;            current_allocation -= pinfo->size;            if (current_allocation < 0)               fprintf(STDERR, "Duplicate free of memory\n");            /* We must free the list element too, but first kill               the memory that is to be freed. */            png_memset(ptr, 0x55, pinfo->size);            png_free_default(png_ptr, pinfo);            pinfo=NULL;            break;         }         if (pinfo->next == NULL)         {            fprintf(STDERR, "Pointer %x not found\n", (unsigned int)ptr);            break;         }         ppinfo = &pinfo->next;      }   }   /* Finally free the data. */#if PNG_DEBUG   if(verbose)      printf("Freeing %x\n",ptr);#endif   png_free_default(png_ptr, ptr);   ptr=NULL;}#endif /* PNG_USER_MEM_SUPPORTED *//* END of code to test memory allocation/deallocation *//* Test one file */inttest_one_file(PNG_CONST char *inname, PNG_CONST char *outname){   static png_FILE_p fpin;   static png_FILE_p fpout;  /* "static" prevents setjmp corruption */   png_structp read_ptr;   png_infop read_info_ptr, end_info_ptr;#ifdef PNG_WRITE_SUPPORTED   png_structp write_ptr;   png_infop write_info_ptr;   png_infop write_end_info_ptr;#else   png_structp write_ptr = NULL;   png_infop write_info_ptr = NULL;   png_infop write_end_info_ptr = NULL;#endif   png_bytep row_buf;   png_uint_32 y;   png_uint_32 width, height;   int num_pass, pass;   int bit_depth, color_type;#ifdef PNG_SETJMP_SUPPORTED#ifdef USE_FAR_KEYWORD   jmp_buf jmpbuf;#endif#endif#if defined(_WIN32_WCE)   TCHAR path[MAX_PATH];#endif   char inbuf[256], outbuf[256];   row_buf = NULL;#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 input file %s\n", inname);      return (1);   }#if defined(_WIN32_WCE)   MultiByteToWideChar(CP_ACP, 0, outname, -1, path, MAX_PATH);   if ((fpout = CreateFile(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL)) == INVALID_HANDLE_VALUE)#else   if ((fpout = fopen(outname, "wb")) == NULL)#endif   {      fprintf(STDERR, "Could not open output file %s\n", outname);      FCLOSE(fpin);      return (1);   }   png_debug(0, "Allocating read and write structures\n");#ifdef PNG_USER_MEM_SUPPORTED   read_ptr = png_create_read_struct_2(PNG_LIBPNG_VER_STRING, png_voidp_NULL,      png_error_ptr_NULL, png_error_ptr_NULL, png_voidp_NULL,      (png_malloc_ptr)png_debug_malloc, (png_free_ptr)png_debug_free);#else   read_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, png_voidp_NULL,      png_error_ptr_NULL, png_error_ptr_NULL);#endif#if defined(PNG_NO_STDIO)   png_set_error_fn(read_ptr, (png_voidp)inname, pngtest_error,       pngtest_warning);#endif#ifdef PNG_WRITE_SUPPORTED#ifdef PNG_USER_MEM_SUPPORTED   write_ptr = png_create_write_struct_2(PNG_LIBPNG_VER_STRING, png_voidp_NULL,      png_error_ptr_NULL, png_error_ptr_NULL, png_voidp_NULL,      (png_malloc_ptr)png_debug_malloc, (png_free_ptr)png_debug_free);#else   write_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, png_voidp_NULL,      png_error_ptr_NULL, png_error_ptr_NULL);#endif#if defined(PNG_NO_STDIO)   png_set_error_fn(write_ptr, (png_voidp)inname, pngtest_error,       pngtest_warning);#endif#endif   png_debug(0, "Allocating read_info, write_info and end_info structures\n");   read_info_ptr = png_create_info_struct(read_ptr);   end_info_ptr = png_create_info_struct(read_ptr);#ifdef PNG_WRITE_SUPPORTED   write_info_ptr = png_create_info_struct(write_ptr);   write_end_info_ptr = png_create_info_struct(write_ptr);#endif#ifdef PNG_SETJMP_SUPPORTED   png_debug(0, "Setting jmpbuf for read struct\n");#ifdef USE_FAR_KEYWORD   if (setjmp(jmpbuf))#else   if (setjmp(png_jmpbuf(read_ptr)))#endif   {      fprintf(STDERR, "%s -> %s: libpng read error\n", inname, outname);      if (row_buf)         png_free(read_ptr, row_buf);      png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr);#ifdef PNG_WRITE_SUPPORTED      png_destroy_info_struct(write_ptr, &write_end_info_ptr);      png_destroy_write_struct(&write_ptr, &write_info_ptr);#endif      FCLOSE(fpin);      FCLOSE(fpout);      return (1);   }#ifdef USE_FAR_KEYWORD   png_memcpy(png_jmpbuf(read_ptr),jmpbuf,sizeof(jmp_buf));#endif#ifdef PNG_WRITE_SUPPORTED   png_debug(0, "Setting jmpbuf for write struct\n");#ifdef USE_FAR_KEYWORD   if (setjmp(jmpbuf))#else   if (setjmp(png_jmpbuf(write_ptr)))#endif   {      fprintf(STDERR, "%s -> %s: libpng write error\n", inname, outname);      png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr);      png_destroy_info_struct(write_ptr, &write_end_info_ptr);#ifdef PNG_WRITE_SUPPORTED      png_destroy_write_struct(&write_ptr, &write_info_ptr);#endif      FCLOSE(fpin);      FCLOSE(fpout);      return (1);   }#ifdef USE_FAR_KEYWORD   png_memcpy(png_jmpbuf(write_ptr),jmpbuf,sizeof(jmp_buf));#endif#endif#endif   png_debug(0, "Initializing input and output streams\n");#if !defined(PNG_NO_STDIO)   png_init_io(read_ptr, fpin);#  ifdef PNG_WRITE_SUPPORTED   png_init_io(write_ptr, fpout);#  endif#else   png_set_read_fn(read_ptr, (png_voidp)fpin, pngtest_read_data);#  ifdef PNG_WRITE_SUPPORTED   png_set_write_fn(write_ptr, (png_voidp)fpout,  pngtest_write_data,#    if defined(PNG_WRITE_FLUSH_SUPPORTED)      pngtest_flush);#    else      NULL);#    endif#  endif#endif   if(status_dots_requested == 1)   {#ifdef PNG_WRITE_SUPPORTED      png_set_write_status_fn(write_ptr, write_row_callback);#endif      png_set_read_status_fn(read_ptr, read_row_callback);   }   else   {#ifdef PNG_WRITE_SUPPORTED      png_set_write_status_fn(write_ptr, png_write_status_ptr_NULL);#endif      png_set_read_status_fn(read_ptr, png_read_status_ptr_NULL);   }#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)   {     int i;     for(i=0; i<256; i++)        filters_used[i]=0;     png_set_read_user_transform_fn(read_ptr, count_filters);   }#endif#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)   zero_samples=0;   png_set_write_user_transform_fn(write_ptr, count_zero_samples);#endif#define HANDLE_CHUNK_IF_SAFE      2#define HANDLE_CHUNK_ALWAYS       3#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)   png_set_keep_unknown_chunks(read_ptr, HANDLE_CHUNK_ALWAYS,      png_bytep_NULL, 0);#endif#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)   png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_IF_SAFE,      png_bytep_NULL, 0);#endif   png_debug(0, "Reading info struct\n");   png_read_info(read_ptr, read_info_ptr);   png_debug(0, "Transferring info struct\n");   {      int interlace_type, compression_type, filter_type;      if (png_get_IHDR(read_ptr, read_info_ptr, &width, &height, &bit_depth,          &color_type, &interlace_type, &compression_type, &filter_type))      {         png_set_IHDR(write_ptr, write_info_ptr, width, height, bit_depth,#if defined(PNG_WRITE_INTERLACING_SUPPORTED)            color_type, interlace_type, compression_type, filter_type);#else            color_type, PNG_INTERLACE_NONE, compression_type, filter_type);#endif      }   }#if defined(PNG_FIXED_POINT_SUPPORTED)#if defined(PNG_cHRM_SUPPORTED)   {      png_fixed_point white_x, white_y, red_x, red_y, green_x, green_y, blue_x,         blue_y;      if (png_get_cHRM_fixed(read_ptr, read_info_ptr, &white_x, &white_y, &red_x,         &red_y, &green_x, &green_y, &blue_x, &blue_y))      {         png_set_cHRM_fixed(write_ptr, write_info_ptr, white_x, white_y, red_x,            red_y, green_x, green_y, blue_x, blue_y);      }   }#endif#if defined(PNG_gAMA_SUPPORTED)   {      png_fixed_point gamma;      if (png_get_gAMA_fixed(read_ptr, read_info_ptr, &gamma))      {         png_set_gAMA_fixed(write_ptr, write_info_ptr, gamma);      }   }#endif#else /* Use floating point versions */#if defined(PNG_FLOATING_POINT_SUPPORTED)#if defined(PNG_cHRM_SUPPORTED)   {      double white_x, white_y, red_x, red_y, green_x, green_y, blue_x,         blue_y;      if (png_get_cHRM(read_ptr, read_info_ptr, &white_x, &white_y, &red_x,         &red_y, &green_x, &green_y, &blue_x, &blue_y))      {         png_set_cHRM(write_ptr, write_info_ptr, white_x, white_y, red_x,            red_y, green_x, green_y, blue_x, blue_y);      }   }#endif#if defined(PNG_gAMA_SUPPORTED)   {      double gamma;      if (png_get_gAMA(read_ptr, read_info_ptr, &gamma))      {         png_set_gAMA(write_ptr, write_info_ptr, gamma);      }   }#endif#endif /* floating point */#endif /* fixed point */#if defined(PNG_iCCP_SUPPORTED)   {      png_charp name;      png_charp profile;      png_uint_32 proflen;      int compression_type;      if (png_get_iCCP(read_ptr, read_info_ptr, &name, &compression_type,                      &profile, &proflen))      {         png_set_iCCP(write_ptr, write_info_ptr, name, compression_type,                      profile, proflen);      }   }#endif#if defined(PNG_sRGB_SUPPORTED)   {      int intent;      if (png_get_sRGB(read_ptr, read_info_ptr, &intent))      {         png_set_sRGB(write_ptr, write_info_ptr, intent);      }   }#endif   {      png_colorp palette;      int num_palette;      if (png_get_PLTE(read_ptr, read_info_ptr, &palette, &num_palette))      {         png_set_PLTE(write_ptr, write_info_ptr, palette, num_palette);      }   }#if defined(PNG_bKGD_SUPPORTED)   {      png_color_16p background;      if (png_get_bKGD(read_ptr, read_info_ptr, &background))      {         png_set_bKGD(write_ptr, write_info_ptr, background);      }   }#endif#if defined(PNG_hIST_SUPPORTED)   {      png_uint_16p hist;      if (png_get_hIST(read_ptr, read_info_ptr, &hist))      {         png_set_hIST(write_ptr, write_info_ptr, hist);      }   }#endif#if defined(PNG_oFFs_SUPPORTED)   {      png_int_32 offset_x, offset_y;      int unit_type;      if (png_get_oFFs(read_ptr, read_info_ptr,&offset_x,&offset_y,&unit_type))      {         png_set_oFFs(write_ptr, write_info_ptr, offset_x, offset_y, unit_type);      }   }#endif#if defined(PNG_pCAL_SUPPORTED)   {      png_charp purpose, units;      png_charpp params;      png_int_32 X0, X1;      int type, nparams;      if (png_get_pCAL(read_ptr, read_info_ptr, &purpose, &X0, &X1, &type,         &nparams, &units, &params))      {         png_set_pCAL(write_ptr, write_info_ptr, purpose, X0, X1, type,            nparams, units, params);      }   }#endif#if defined(PNG_pHYs_SUPPORTED)   {      png_uint_32 res_x, res_y;      int unit_type;      if (png_get_pHYs(read_ptr, read_info_ptr, &res_x, &res_y, &unit_type))      {         png_set_pHYs(write_ptr, write_info_ptr, res_x, res_y, unit_type);      }   }#endif#if defined(PNG_sBIT_SUPPORTED)   {      png_color_8p sig_bit;      if (png_get_sBIT(read_ptr, read_info_ptr, &sig_bit))      {         png_set_sBIT(write_ptr, write_info_ptr, sig_bit);      }   }#endif#if defined(PNG_sCAL_SUPPORTED)#ifdef PNG_FLOATING_POINT_SUPPORTED   {      int unit;      double scal_width, scal_height;      if (png_get_sCAL(read_ptr, read_info_ptr, &unit, &scal_width,         &scal_height))      {         png_set_sCAL(write_ptr, write_info_ptr, unit, scal_width, scal_height);      }   }#else#ifdef PNG_FIXED_POINT_SUPPORTED   {      int unit;      png_charp scal_width, scal_height;      if (png_get_sCAL_s(read_ptr, read_info_ptr, &unit, &scal_width,          &scal_height))      {         png_set_sCAL_s(write_ptr, write_info_ptr, unit, scal_width, scal_height);      }   }#endif#endif#endif#if defined(PNG_TEXT_SUPPORTED)   {      png_textp text_ptr;      int num_text;      if (png_get_text(read_ptr, read_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_info_ptr, text_ptr, num_text);      }   }#endif#if defined(PNG_tIME_SUPPORTED)   {      png_timep mod_time;      if (png_get_tIME(read_ptr, read_info_ptr, &mod_time))      {         png_set_tIME(write_ptr, write_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_tRNS_SUPPORTED)   {      png_bytep trans;      int num_trans;      png_color_16p trans_values;      if (png_get_tRNS(read_ptr, read_info_ptr, &trans, &num_trans,         &trans_values))      {         png_set_tRNS(write_ptr, write_info_ptr, trans, num_trans,            trans_values);      }   }#endif#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)   {      png_unknown_chunkp unknowns;      int num_unknowns = (int)png_get_unknown_chunks(read_ptr, read_info_ptr,         &unknowns);      if (num_unknowns)

⌨️ 快捷键说明

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