亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? png.c

?? 一款最完整的工業組態軟源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:

/* png.c - location for general purpose libpng functions
 *
 * libpng version 1.2.7 - September 12, 2004
 * For conditions of distribution and use, see copyright notice in png.h
 * Copyright (c) 1998-2004 Glenn Randers-Pehrson
 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
 */

#define PNG_INTERNAL
#define PNG_NO_EXTERN
#include "png.h"

/* Generate a compiler error if there is an old png.h in the search path. */
typedef version_1_2_7 Your_png_h_is_not_version_1_2_7;

/* Version information for C files.  This had better match the version
 * string defined in png.h.  */

#ifdef PNG_USE_GLOBAL_ARRAYS
/* png_libpng_ver was changed to a function in version 1.0.5c */
const char png_libpng_ver[18] = PNG_LIBPNG_VER_STRING;

/* png_sig was changed to a function in version 1.0.5c */
/* Place to hold the signature string for a PNG file. */
const png_byte FARDATA png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10};

/* Invoke global declarations for constant strings for known chunk types */
PNG_IHDR;
PNG_IDAT;
PNG_IEND;
PNG_PLTE;
PNG_bKGD;
PNG_cHRM;
PNG_gAMA;
PNG_hIST;
PNG_iCCP;
PNG_iTXt;
PNG_oFFs;
PNG_pCAL;
PNG_sCAL;
PNG_pHYs;
PNG_sBIT;
PNG_sPLT;
PNG_sRGB;
PNG_tEXt;
PNG_tIME;
PNG_tRNS;
PNG_zTXt;

/* arrays to facilitate easy interlacing - use pass (0 - 6) as index */

/* start of interlace block */
const int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};

/* offset to next interlace block */
const int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};

/* start of interlace block in the y direction */
const int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};

/* offset to next interlace block in the y direction */
const int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};

/* width of interlace block (used in assembler routines only) */
#ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW
const int FARDATA png_pass_width[] = {8, 4, 4, 2, 2, 1, 1};
#endif

/* Height of interlace block.  This is not currently used - if you need
 * it, uncomment it here and in png.h
const int FARDATA png_pass_height[] = {8, 8, 4, 4, 2, 2, 1};
*/

/* Mask to determine which pixels are valid in a pass */
const int FARDATA png_pass_mask[] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff};

/* Mask to determine which pixels to overwrite while displaying */
const int FARDATA png_pass_dsp_mask[]
   = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff};

#endif

/* Tells libpng that we have already handled the first "num_bytes" bytes
 * of the PNG file signature.  If the PNG data is embedded into another
 * stream we can set num_bytes = 8 so that libpng will not attempt to read
 * or write any of the magic bytes before it starts on the IHDR.
 */

void PNGAPI
png_set_sig_bytes(png_structp png_ptr, int num_bytes)
{
   png_debug(1, "in png_set_sig_bytes\n");
   if (num_bytes > 8)
      png_error(png_ptr, "Too many bytes for PNG signature.");

   png_ptr->sig_bytes = (png_byte)(num_bytes < 0 ? 0 : num_bytes);
}

/* Checks whether the supplied bytes match the PNG signature.  We allow
 * checking less than the full 8-byte signature so that those apps that
 * already read the first few bytes of a file to determine the file type
 * can simply check the remaining bytes for extra assurance.  Returns
 * an integer less than, equal to, or greater than zero if sig is found,
 * respectively, to be less than, to match, or be greater than the correct
 * PNG signature (this is the same behaviour as strcmp, memcmp, etc).
 */
int PNGAPI
png_sig_cmp(png_bytep sig, png_size_t start, png_size_t num_to_check)
{
   png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
   if (num_to_check > 8)
      num_to_check = 8;
   else if (num_to_check < 1)
      return (0);

   if (start > 7)
      return (0);

   if (start + num_to_check > 8)
      num_to_check = 8 - start;

   return ((int)(png_memcmp(&sig[start], &png_signature[start], num_to_check)));
}

/* (Obsolete) function to check signature bytes.  It does not allow one
 * to check a partial signature.  This function might be removed in the
 * future - use png_sig_cmp().  Returns true (nonzero) if the file is a PNG.
 */
int PNGAPI
png_check_sig(png_bytep sig, int num)
{
  return ((int)!png_sig_cmp(sig, (png_size_t)0, (png_size_t)num));
}

/* Function to allocate memory for zlib and clear it to 0. */
#ifdef PNG_1_0_X
voidpf PNGAPI
#else
voidpf /* private */
#endif
png_zalloc(voidpf png_ptr, uInt items, uInt size)
{
   png_voidp ptr;
   png_structp p=png_ptr;
   png_uint_32 save_flags=p->flags;
   png_uint_32 num_bytes;

   if (items > PNG_UINT_32_MAX/size)
   {
     png_warning (png_ptr, "Potential overflow in png_zalloc()");
     return (NULL);
   }
   num_bytes = (png_uint_32)items * size;

   p->flags|=PNG_FLAG_MALLOC_NULL_MEM_OK;
   ptr = (png_voidp)png_malloc((png_structp)png_ptr, num_bytes);
   p->flags=save_flags;

#if defined(PNG_1_0_X) && !defined(PNG_NO_ZALLOC_ZERO)
   if (ptr == NULL)
       return ((voidpf)ptr);

   if (num_bytes > (png_uint_32)0x8000L)
   {
      png_memset(ptr, 0, (png_size_t)0x8000L);
      png_memset((png_bytep)ptr + (png_size_t)0x8000L, 0,
         (png_size_t)(num_bytes - (png_uint_32)0x8000L));
   }
   else
   {
      png_memset(ptr, 0, (png_size_t)num_bytes);
   }
#endif
   return ((voidpf)ptr);
}

/* function to free memory for zlib */
#ifdef PNG_1_0_X
void PNGAPI
#else
void /* private */
#endif
png_zfree(voidpf png_ptr, voidpf ptr)
{
   png_free((png_structp)png_ptr, (png_voidp)ptr);
}

/* Reset the CRC variable to 32 bits of 1's.  Care must be taken
 * in case CRC is > 32 bits to leave the top bits 0.
 */
void /* PRIVATE */
png_reset_crc(png_structp png_ptr)
{
   png_ptr->crc = crc32(0, Z_NULL, 0);
}

/* Calculate the CRC over a section of data.  We can only pass as
 * much data to this routine as the largest single buffer size.  We
 * also check that this data will actually be used before going to the
 * trouble of calculating it.
 */
void /* PRIVATE */
png_calculate_crc(png_structp png_ptr, png_bytep ptr, png_size_t length)
{
   int need_crc = 1;

   if (png_ptr->chunk_name[0] & 0x20)                     /* ancillary */
   {
      if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) ==
          (PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN))
         need_crc = 0;
   }
   else                                                    /* critical */
   {
      if (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_IGNORE)
         need_crc = 0;
   }

   if (need_crc)
      png_ptr->crc = crc32(png_ptr->crc, ptr, (uInt)length);
}

/* Allocate the memory for an info_struct for the application.  We don't
 * really need the png_ptr, but it could potentially be useful in the
 * future.  This should be used in favour of malloc(png_sizeof(png_info))
 * and png_info_init() so that applications that want to use a shared
 * libpng don't have to be recompiled if png_info changes size.
 */
png_infop PNGAPI
png_create_info_struct(png_structp png_ptr)
{
   png_infop info_ptr;

   png_debug(1, "in png_create_info_struct\n");
   if(png_ptr == NULL) return (NULL);
#ifdef PNG_USER_MEM_SUPPORTED
   info_ptr = (png_infop)png_create_struct_2(PNG_STRUCT_INFO,
      png_ptr->malloc_fn, png_ptr->mem_ptr);
#else
   info_ptr = (png_infop)png_create_struct(PNG_STRUCT_INFO);
#endif
   if (info_ptr != NULL)
      png_info_init_3(&info_ptr, png_sizeof(png_info));

   return (info_ptr);
}

/* This function frees the memory associated with a single info struct.
 * Normally, one would use either png_destroy_read_struct() or
 * png_destroy_write_struct() to free an info struct, but this may be
 * useful for some applications.
 */
void PNGAPI
png_destroy_info_struct(png_structp png_ptr, png_infopp info_ptr_ptr)
{
   png_infop info_ptr = NULL;

   png_debug(1, "in png_destroy_info_struct\n");
   if (info_ptr_ptr != NULL)
      info_ptr = *info_ptr_ptr;

   if (info_ptr != NULL)
   {
      png_info_destroy(png_ptr, info_ptr);

#ifdef PNG_USER_MEM_SUPPORTED
      png_destroy_struct_2((png_voidp)info_ptr, png_ptr->free_fn,
          png_ptr->mem_ptr);
#else
      png_destroy_struct((png_voidp)info_ptr);
#endif
      *info_ptr_ptr = NULL;
   }
}

/* Initialize the info structure.  This is now an internal function (0.89)
 * and applications using it are urged to use png_create_info_struct()
 * instead.
 */
#undef png_info_init
void PNGAPI
png_info_init(png_infop info_ptr)
{
   /* We only come here via pre-1.0.12-compiled applications */
   png_info_init_3(&info_ptr, 0);
}

void PNGAPI
png_info_init_3(png_infopp ptr_ptr, png_size_t png_info_struct_size)
{
   png_infop info_ptr = *ptr_ptr;

   png_debug(1, "in png_info_init_3\n");

   if(png_sizeof(png_info) > png_info_struct_size)
     {
       png_destroy_struct(info_ptr);
       info_ptr = (png_infop)png_create_struct(PNG_STRUCT_INFO);
       *ptr_ptr = info_ptr;
     }

   /* set everything to 0 */
   png_memset(info_ptr, 0, png_sizeof (png_info));
}

#ifdef PNG_FREE_ME_SUPPORTED
void PNGAPI
png_data_freer(png_structp png_ptr, png_infop info_ptr,
   int freer, png_uint_32 mask)
{
   png_debug(1, "in png_data_freer\n");
   if (png_ptr == NULL || info_ptr == NULL)
      return;
   if(freer == PNG_DESTROY_WILL_FREE_DATA)
      info_ptr->free_me |= mask;
   else if(freer == PNG_USER_WILL_FREE_DATA)
      info_ptr->free_me &= ~mask;
   else
      png_warning(png_ptr,
         "Unknown freer parameter in png_data_freer.");
}
#endif

void PNGAPI
png_free_data(png_structp png_ptr, png_infop info_ptr, png_uint_32 mask,
   int num)
{
   png_debug(1, "in png_free_data\n");
   if (png_ptr == NULL || info_ptr == NULL)
      return;

#if defined(PNG_TEXT_SUPPORTED)
/* free text item num or (if num == -1) all text items */
#ifdef PNG_FREE_ME_SUPPORTED
if ((mask & PNG_FREE_TEXT) & info_ptr->free_me)
#else
if (mask & PNG_FREE_TEXT)
#endif
{
   if (num != -1)
   {
     if (info_ptr->text && info_ptr->text[num].key)
     {
         png_free(png_ptr, info_ptr->text[num].key);
         info_ptr->text[num].key = NULL;
     }
   }
   else
   {
       int i;
       for (i = 0; i < info_ptr->num_text; i++)
           png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, i);
       png_free(png_ptr, info_ptr->text);
       info_ptr->text = NULL;
       info_ptr->num_text=0;
   }
}
#endif

#if defined(PNG_tRNS_SUPPORTED)
/* free any tRNS entry */
#ifdef PNG_FREE_ME_SUPPORTED
if ((mask & PNG_FREE_TRNS) & info_ptr->free_me)
#else
if ((mask & PNG_FREE_TRNS) && (png_ptr->flags & PNG_FLAG_FREE_TRNS))
#endif
{
    png_free(png_ptr, info_ptr->trans);
    info_ptr->valid &= ~PNG_INFO_tRNS;
#ifndef PNG_FREE_ME_SUPPORTED
    png_ptr->flags &= ~PNG_FLAG_FREE_TRNS;
#endif
    info_ptr->trans = NULL;
}
#endif

#if defined(PNG_sCAL_SUPPORTED)
/* free any sCAL entry */
#ifdef PNG_FREE_ME_SUPPORTED
if ((mask & PNG_FREE_SCAL) & info_ptr->free_me)
#else
if (mask & PNG_FREE_SCAL)
#endif
{
#if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED)
    png_free(png_ptr, info_ptr->scal_s_width);
    png_free(png_ptr, info_ptr->scal_s_height);
    info_ptr->scal_s_width = NULL;
    info_ptr->scal_s_height = NULL;
#endif
    info_ptr->valid &= ~PNG_INFO_sCAL;
}
#endif

#if defined(PNG_pCAL_SUPPORTED)
/* free any pCAL entry */
#ifdef PNG_FREE_ME_SUPPORTED
if ((mask & PNG_FREE_PCAL) & info_ptr->free_me)
#else
if (mask & PNG_FREE_PCAL)
#endif
{
    png_free(png_ptr, info_ptr->pcal_purpose);
    png_free(png_ptr, info_ptr->pcal_units);
    info_ptr->pcal_purpose = NULL;
    info_ptr->pcal_units = NULL;
    if (info_ptr->pcal_params != NULL)
    {
        int i;
        for (i = 0; i < (int)info_ptr->pcal_nparams; i++)
        {
          png_free(png_ptr, info_ptr->pcal_params[i]);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色视频在线| 国产精品理伦片| 国产精品日产欧美久久久久| 亚洲一区二区三区自拍| 粉嫩av亚洲一区二区图片| 欧美一级午夜免费电影| 日韩美女久久久| 国产精品66部| 日韩精品专区在线| 一区二区三区精品视频在线| 国产一区二区电影| 日韩一区二区三区视频在线观看| 亚洲日本免费电影| 高清国产午夜精品久久久久久| 欧美一二三在线| 亚洲不卡在线观看| 欧美性大战久久久久久久蜜臀| 亚洲国产电影在线观看| 国产精品亚洲午夜一区二区三区| 欧美日韩精品一区二区天天拍小说 | 国产性天天综合网| 亚洲国产精品人人做人人爽| 91免费在线看| 日韩伦理电影网| 波多野结衣欧美| 中文字幕av一区 二区| 国产成a人无v码亚洲福利| 久久久午夜精品理论片中文字幕| 久久精品国产亚洲高清剧情介绍| 69精品人人人人| 日韩二区三区四区| 日韩写真欧美这视频| 美女久久久精品| 精品国产百合女同互慰| 激情久久五月天| 久久―日本道色综合久久| 国产精品99久| **欧美大码日韩| 91亚洲永久精品| 亚洲成人激情自拍| 91精品国产黑色紧身裤美女| 久久国产人妖系列| 国产精品无码永久免费888| 99精品视频一区二区三区| 亚洲靠逼com| 在线91免费看| 九九九精品视频| 国产精品久久毛片av大全日韩| 91网站视频在线观看| 亚洲不卡一区二区三区| 欧美mv日韩mv亚洲| eeuss国产一区二区三区| 亚洲一区二区三区四区在线| 日韩欧美一区二区久久婷婷| 国产精品99久| 亚洲一区二区av在线| 日韩欧美国产一区在线观看| 精品亚洲成a人在线观看| 国产精品私人自拍| 欧美日韩在线播| 精品无人码麻豆乱码1区2区 | 中文字幕高清一区| 在线视频国内自拍亚洲视频| 日本伊人色综合网| 国产精品视频线看| 91精品国产欧美一区二区| 国产高清无密码一区二区三区| 亚洲乱码中文字幕| 精品日韩欧美在线| 91在线视频观看| 久久超级碰视频| 亚洲品质自拍视频网站| 日韩欧美激情四射| 日本电影欧美片| 久久99国产精品尤物| 亚洲精品ww久久久久久p站| 精品国产百合女同互慰| 在线视频一区二区免费| 国产盗摄女厕一区二区三区| 午夜免费久久看| 中文字幕精品一区| 日韩免费高清视频| 欧美日韩一级黄| 不卡一区二区三区四区| 麻豆中文一区二区| 亚洲综合男人的天堂| 中文在线一区二区| 日韩精品中文字幕一区| 欧美二区三区的天堂| 色婷婷综合视频在线观看| 国产成人aaa| 国产在线精品国自产拍免费| 日本一区中文字幕| 亚洲成人精品一区二区| 亚洲黄色在线视频| 亚洲区小说区图片区qvod| 国产色产综合色产在线视频| 欧美成人精品二区三区99精品| 欧美亚洲免费在线一区| 色老综合老女人久久久| 成人av一区二区三区| 国产成人综合在线播放| 国产一二精品视频| 九色|91porny| 精品一区二区三区在线播放| 欧美96一区二区免费视频| 午夜免费欧美电影| 亚洲成av人综合在线观看| 亚洲人成精品久久久久久| 国产精品污www在线观看| 国产欧美日韩不卡| 国产精品每日更新| 国产精品高潮呻吟久久| 国产精品久久久久久久岛一牛影视| 国产欧美视频一区二区| 国产精品无人区| 亚洲欧美日本韩国| 亚洲精品欧美综合四区| 亚洲图片欧美一区| 日韩中文字幕亚洲一区二区va在线| 亚洲成人av电影在线| 天天爽夜夜爽夜夜爽精品视频| 麻豆精品一区二区综合av| 日韩电影免费一区| 久久国产精品72免费观看| 国产高清在线精品| 99精品热视频| 91国偷自产一区二区使用方法| 欧美三级日韩三级国产三级| 欧美精品一卡二卡| 精品久久久网站| 中文字幕精品三区| 一级中文字幕一区二区| 日韩高清中文字幕一区| 韩国精品一区二区| 成人一级黄色片| 欧美日韩一区二区欧美激情| 欧美一二三四在线| 中文字幕免费不卡在线| 一区二区三区欧美日| 免费观看在线色综合| 国产99一区视频免费| 欧美视频自拍偷拍| 精品人在线二区三区| 国产精品传媒在线| 亚洲图片欧美一区| 国产成人在线观看| 欧美另类一区二区三区| 久久精品亚洲精品国产欧美kt∨ | 91在线看国产| 3d成人h动漫网站入口| 欧美国产综合色视频| 亚洲电影欧美电影有声小说| 国产成人鲁色资源国产91色综| 日本道在线观看一区二区| 精品免费99久久| 亚洲国产日韩在线一区模特| 国产精品白丝jk黑袜喷水| 欧美日韩精品一区二区三区蜜桃| 久久久高清一区二区三区| 亚洲自拍与偷拍| 成人少妇影院yyyy| 欧美一级日韩免费不卡| 亚洲精品视频自拍| 国产成人在线网站| 91精品综合久久久久久| 中文字幕亚洲区| 激情图区综合网| 欧美精品三级日韩久久| 亚洲日本在线天堂| 高清视频一区二区| 久久综合国产精品| 日韩国产一区二| 欧美亚洲一区三区| 亚洲三级电影网站| 99精品偷自拍| 国产亚洲精品免费| 国产在线国偷精品产拍免费yy| 欧美精品久久99久久在免费线| 中文字幕在线不卡| 国产精品一区在线观看乱码 | 在线综合+亚洲+欧美中文字幕| 亚洲三级久久久| 成人av电影在线网| 国产农村妇女毛片精品久久麻豆| 久久超碰97中文字幕| 欧美一区二区日韩| 日韩经典中文字幕一区| 欧美丝袜丝交足nylons图片| 一区二区三区在线播| 欧美日韩中文精品| 亚洲综合精品自拍| 欧美三级电影在线观看| 亚洲午夜久久久久| 欧美精品一二三四| 青青草97国产精品免费观看| 欧美日韩一区国产| 午夜精品久久久久久久久| 欧美一区国产二区| 老司机免费视频一区二区|