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

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

?? pngwutil.c

?? 一款最完整的工業組態軟源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
void /* PRIVATE */
png_write_tIME(png_structp png_ptr, png_timep mod_time)
{
#ifdef PNG_USE_LOCAL_ARRAYS
   PNG_tIME;
#endif
   png_byte buf[7];

   png_debug(1, "in png_write_tIME\n");
   if (mod_time->month  > 12 || mod_time->month  < 1 ||
       mod_time->day    > 31 || mod_time->day    < 1 ||
       mod_time->hour   > 23 || mod_time->second > 60)
   {
      png_warning(png_ptr, "Invalid time specified for tIME chunk");
      return;
   }

   png_save_uint_16(buf, mod_time->year);
   buf[2] = mod_time->month;
   buf[3] = mod_time->day;
   buf[4] = mod_time->hour;
   buf[5] = mod_time->minute;
   buf[6] = mod_time->second;

   png_write_chunk(png_ptr, (png_bytep)png_tIME, buf, (png_size_t)7);
}
#endif

/* initializes the row writing capability of libpng */
void /* PRIVATE */
png_write_start_row(png_structp png_ptr)
{
#ifdef PNG_USE_LOCAL_ARRAYS
   /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */

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

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

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

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

   png_size_t buf_size;

   png_debug(1, "in png_write_start_row\n");
   buf_size = (png_size_t)(PNG_ROWBYTES(
      png_ptr->usr_channels*png_ptr->usr_bit_depth,png_ptr->width)+1);

   /* set up row buffer */
   png_ptr->row_buf = (png_bytep)png_malloc(png_ptr, (png_uint_32)buf_size);
   png_ptr->row_buf[0] = PNG_FILTER_VALUE_NONE;

   /* set up filtering buffer, if using this filter */
   if (png_ptr->do_filter & PNG_FILTER_SUB)
   {
      png_ptr->sub_row = (png_bytep)png_malloc(png_ptr,
         (png_ptr->rowbytes + 1));
      png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB;
   }

   /* We only need to keep the previous row if we are using one of these. */
   if (png_ptr->do_filter & (PNG_FILTER_AVG | PNG_FILTER_UP | PNG_FILTER_PAETH))
   {
     /* set up previous row buffer */
      png_ptr->prev_row = (png_bytep)png_malloc(png_ptr, (png_uint_32)buf_size);
      png_memset(png_ptr->prev_row, 0, buf_size);

      if (png_ptr->do_filter & PNG_FILTER_UP)
      {
         png_ptr->up_row = (png_bytep )png_malloc(png_ptr,
            (png_ptr->rowbytes + 1));
         png_ptr->up_row[0] = PNG_FILTER_VALUE_UP;
      }

      if (png_ptr->do_filter & PNG_FILTER_AVG)
      {
         png_ptr->avg_row = (png_bytep)png_malloc(png_ptr,
            (png_ptr->rowbytes + 1));
         png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG;
      }

      if (png_ptr->do_filter & PNG_FILTER_PAETH)
      {
         png_ptr->paeth_row = (png_bytep )png_malloc(png_ptr,
            (png_ptr->rowbytes + 1));
         png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH;
      }
   }

#ifdef PNG_WRITE_INTERLACING_SUPPORTED
   /* if interlaced, we need to set up width and height of pass */
   if (png_ptr->interlaced)
   {
      if (!(png_ptr->transformations & PNG_INTERLACE))
      {
         png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 -
            png_pass_ystart[0]) / png_pass_yinc[0];
         png_ptr->usr_width = (png_ptr->width + png_pass_inc[0] - 1 -
            png_pass_start[0]) / png_pass_inc[0];
      }
      else
      {
         png_ptr->num_rows = png_ptr->height;
         png_ptr->usr_width = png_ptr->width;
      }
   }
   else
#endif
   {
      png_ptr->num_rows = png_ptr->height;
      png_ptr->usr_width = png_ptr->width;
   }
   png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
   png_ptr->zstream.next_out = png_ptr->zbuf;
}

/* Internal use only.  Called when finished processing a row of data. */
void /* PRIVATE */
png_write_finish_row(png_structp png_ptr)
{
#ifdef PNG_USE_LOCAL_ARRAYS
   /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */

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

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

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

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

   int ret;

   png_debug(1, "in png_write_finish_row\n");
   /* next row */
   png_ptr->row_number++;

   /* see if we are done */
   if (png_ptr->row_number < png_ptr->num_rows)
      return;

#ifdef PNG_WRITE_INTERLACING_SUPPORTED
   /* if interlaced, go to next pass */
   if (png_ptr->interlaced)
   {
      png_ptr->row_number = 0;
      if (png_ptr->transformations & PNG_INTERLACE)
      {
         png_ptr->pass++;
      }
      else
      {
         /* loop until we find a non-zero width or height pass */
         do
         {
            png_ptr->pass++;
            if (png_ptr->pass >= 7)
               break;
            png_ptr->usr_width = (png_ptr->width +
               png_pass_inc[png_ptr->pass] - 1 -
               png_pass_start[png_ptr->pass]) /
               png_pass_inc[png_ptr->pass];
            png_ptr->num_rows = (png_ptr->height +
               png_pass_yinc[png_ptr->pass] - 1 -
               png_pass_ystart[png_ptr->pass]) /
               png_pass_yinc[png_ptr->pass];
            if (png_ptr->transformations & PNG_INTERLACE)
               break;
         } while (png_ptr->usr_width == 0 || png_ptr->num_rows == 0);

      }

      /* reset the row above the image for the next pass */
      if (png_ptr->pass < 7)
      {
         if (png_ptr->prev_row != NULL)
            png_memset(png_ptr->prev_row, 0,
               (png_size_t)(PNG_ROWBYTES(png_ptr->usr_channels*
               png_ptr->usr_bit_depth,png_ptr->width))+1);
         return;
      }
   }
#endif

   /* if we get here, we've just written the last row, so we need
      to flush the compressor */
   do
   {
      /* tell the compressor we are done */
      ret = deflate(&png_ptr->zstream, Z_FINISH);
      /* check for an error */
      if (ret == Z_OK)
      {
         /* check to see if we need more room */
         if (!(png_ptr->zstream.avail_out))
         {
            png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size);
            png_ptr->zstream.next_out = png_ptr->zbuf;
            png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
         }
      }
      else if (ret != Z_STREAM_END)
      {
         if (png_ptr->zstream.msg != NULL)
            png_error(png_ptr, png_ptr->zstream.msg);
         else
            png_error(png_ptr, "zlib error");
      }
   } while (ret != Z_STREAM_END);

   /* write any extra space */
   if (png_ptr->zstream.avail_out < png_ptr->zbuf_size)
   {
      png_write_IDAT(png_ptr, png_ptr->zbuf, png_ptr->zbuf_size -
         png_ptr->zstream.avail_out);
   }

   deflateReset(&png_ptr->zstream);
}

#if defined(PNG_WRITE_INTERLACING_SUPPORTED)
/* Pick out the correct pixels for the interlace pass.
 * The basic idea here is to go through the row with a source
 * pointer and a destination pointer (sp and dp), and copy the
 * correct pixels for the pass.  As the row gets compacted,
 * sp will always be >= dp, so we should never overwrite anything.
 * See the default: case for the easiest code to understand.
 */
void /* PRIVATE */
png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
{
#ifdef PNG_USE_LOCAL_ARRAYS
   /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */

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

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

   png_debug(1, "in png_do_write_interlace\n");
   /* we don't have to do anything on the last pass (6) */
#if defined(PNG_USELESS_TESTS_SUPPORTED)
   if (row != NULL && row_info != NULL && pass < 6)
#else
   if (pass < 6)
#endif
   {
      /* each pixel depth is handled separately */
      switch (row_info->pixel_depth)
      {
         case 1:
         {
            png_bytep sp;
            png_bytep dp;
            int shift;
            int d;
            int value;
            png_uint_32 i;
            png_uint_32 row_width = row_info->width;

            dp = row;
            d = 0;
            shift = 7;
            for (i = png_pass_start[pass]; i < row_width;
               i += png_pass_inc[pass])
            {
               sp = row + (png_size_t)(i >> 3);
               value = (int)(*sp >> (7 - (int)(i & 0x07))) & 0x01;
               d |= (value << shift);

               if (shift == 0)
               {
                  shift = 7;
                  *dp++ = (png_byte)d;
                  d = 0;
               }
               else
                  shift--;

            }
            if (shift != 7)
               *dp = (png_byte)d;
            break;
         }
         case 2:
         {
            png_bytep sp;
            png_bytep dp;
            int shift;
            int d;
            int value;
            png_uint_32 i;
            png_uint_32 row_width = row_info->width;

            dp = row;
            shift = 6;
            d = 0;
            for (i = png_pass_start[pass]; i < row_width;
               i += png_pass_inc[pass])
            {
               sp = row + (png_size_t)(i >> 2);
               value = (*sp >> ((3 - (int)(i & 0x03)) << 1)) & 0x03;
               d |= (value << shift);

               if (shift == 0)
               {
                  shift = 6;
                  *dp++ = (png_byte)d;
                  d = 0;
               }
               else
                  shift -= 2;
            }
            if (shift != 6)
                   *dp = (png_byte)d;
            break;
         }
         case 4:
         {
            png_bytep sp;
            png_bytep dp;
            int shift;
            int d;
            int value;
            png_uint_32 i;
            png_uint_32 row_width = row_info->width;

            dp = row;
            shift = 4;
            d = 0;
            for (i = png_pass_start[pass]; i < row_width;
               i += png_pass_inc[pass])
            {
               sp = row + (png_size_t)(i >> 1);
               value = (*sp >> ((1 - (int)(i & 0x01)) << 2)) & 0x0f;
               d |= (value << shift);

               if (shift == 0)
               {
                  shift = 4;
                  *dp++ = (png_byte)d;
                  d = 0;
               }
               else
                  shift -= 4;
            }
            if (shift != 4)
               *dp = (png_byte)d;
            break;
         }
         default:
         {
            png_bytep sp;
            png_bytep dp;
            png_uint_32 i;
            png_uint_32 row_width = row_info->width;
            png_size_t pixel_bytes;

            /* start at the beginning */
            dp = row;
            /* find out how many bytes each pixel takes up */
            pixel_bytes = (row_info->pixel_depth >> 3);
            /* loop through the row, only looking at the pixels that
               matter */
            for (i = png_pass_start[pass]; i < row_width;
               i += png_pass_inc[pass])
            {
               /* find out where the original pixel is */
               sp = row + (png_size_t)i * pixel_bytes;
               /* move the pixel */
               if (dp != sp)
                  png_memcpy(dp, sp, pixel_bytes);
               /* next pixel */
               dp += pixel_bytes;
            }
            break;
         }
      }
      /* set new row width */
      row_info->width = (row_info->width +
         png_pass_inc[pass] - 1 -
         png_pass_start[pass]) /
         png_pass_inc[pass];
         row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,
            row_info->width);
   }
}
#endif

/* This filters the row, chooses which filter to use, if it has not already
 * been specified by the application, and then writes the row out with the
 * chosen filter.
 */
#define PNG_MAXSUM (~((png

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91丨九色丨蝌蚪富婆spa| 国产精品天天看| 欧美极品aⅴ影院| 午夜影视日本亚洲欧洲精品| 狠狠v欧美v日韩v亚洲ⅴ| 欧美中文字幕一区二区三区| 久久免费看少妇高潮| 日本亚洲电影天堂| 91福利国产精品| 最新中文字幕一区二区三区| 久久66热偷产精品| 欧美日韩dvd在线观看| 一区二区欧美在线观看| 成人一区二区三区视频在线观看| 91精品午夜视频| 视频精品一区二区| 欧美性色黄大片| 亚洲一区二区影院| 色婷婷狠狠综合| 亚洲女性喷水在线观看一区| 成人精品一区二区三区四区| 久久这里只有精品视频网| 日本欧美在线观看| 欧美日韩精品系列| 午夜精品福利久久久| 欧美日韩一级片在线观看| 亚洲一区二区3| 在线国产电影不卡| 一级女性全黄久久生活片免费| av在线播放不卡| 综合分类小说区另类春色亚洲小说欧美| 国产高清亚洲一区| 国产精品美日韩| 成人18精品视频| 日韩伦理免费电影| 欧美亚洲一区二区在线| 午夜精品国产更新| 精品理论电影在线| 国产乱码精品一区二区三区忘忧草 | 粉嫩嫩av羞羞动漫久久久| 欧美激情中文字幕一区二区| 成人晚上爱看视频| 亚洲天堂久久久久久久| 欧美性色综合网| 免费黄网站欧美| 国产三级精品三级在线专区| k8久久久一区二区三区| 亚洲一区二区欧美激情| 精品国产一区二区三区久久久蜜月 | 亚洲成人av电影| 日韩欧美色综合| 国产69精品久久99不卡| 亚洲精品视频在线看| 6080亚洲精品一区二区| 国产另类ts人妖一区二区| 中文字幕一区在线观看视频| 欧美日韩高清在线播放| 久久精品国产网站| 亚洲人成电影网站色mp4| 欧美视频自拍偷拍| 国产高清亚洲一区| 亚洲曰韩产成在线| 国产视频一区二区三区在线观看| 91在线观看下载| 日本不卡在线视频| 综合av第一页| 欧美成人猛片aaaaaaa| 91视频精品在这里| 精一区二区三区| 樱桃视频在线观看一区| 精品久久人人做人人爽| 日本伦理一区二区| 国产一区福利在线| 亚洲福利一区二区| 国产精品午夜免费| 日韩欧美国产综合在线一区二区三区| 99久久精品免费观看| 毛片av一区二区| 亚洲一卡二卡三卡四卡五卡| 国产日韩欧美精品在线| 91精品国产综合久久久久久漫画 | 亚洲综合色婷婷| 国产女主播视频一区二区| 欧美日韩一区二区三区在线| 国产盗摄精品一区二区三区在线 | 婷婷久久综合九色综合绿巨人| 久久久久九九视频| 7777精品久久久大香线蕉| 91首页免费视频| 国产不卡在线视频| 激情综合五月婷婷| 日本sm残虐另类| 亚洲一区影音先锋| 一区二区三区在线播| 国产精品久久久久久久久免费樱桃| 欧美一级欧美三级| 91 com成人网| 欧美熟乱第一页| 欧美午夜寂寞影院| 色婷婷av一区二区| 91福利国产成人精品照片| www.在线成人| 北条麻妃一区二区三区| 成人免费va视频| 成人深夜在线观看| 不卡一区二区在线| 成人自拍视频在线| 成人黄色软件下载| 成人一区二区三区中文字幕| 国产精品一区二区在线播放 | 久久亚洲一区二区三区明星换脸| 久久综合国产精品| wwwwww.欧美系列| xnxx国产精品| 国产亚洲一区二区三区在线观看 | 丰满白嫩尤物一区二区| 福利一区二区在线| 成人av网址在线观看| 99久久久久久99| 欧美在线综合视频| 欧美美女一区二区在线观看| 欧美精品一级二级三级| 91精品国产91久久久久久最新毛片 | 欧美一区二区三区影视| 欧美一区二区三区电影| 精品国产91久久久久久久妲己| 日韩欧美国产麻豆| 国产亚洲一区二区在线观看| 国产精品你懂的在线| 一区二区视频在线| 视频一区视频二区中文| 精品中文av资源站在线观看| 国产成人午夜片在线观看高清观看| 成人动漫一区二区在线| 欧洲亚洲精品在线| 精品毛片乱码1区2区3区| 久久精品欧美一区二区三区不卡| 成人欧美一区二区三区黑人麻豆| 夜夜爽夜夜爽精品视频| 蜜桃av噜噜一区| 成人99免费视频| 欧美一级夜夜爽| 国产精品国产三级国产有无不卡 | 国产精品性做久久久久久| 成人av电影在线网| 欧美又粗又大又爽| www精品美女久久久tv| 亚洲欧美电影一区二区| 免费成人av在线| 91视频91自| 久久综合色8888| 亚洲国产综合人成综合网站| 国产一区二区福利视频| 欧美午夜精品理论片a级按摩| 欧美一区二区美女| 亚洲精品乱码久久久久久久久| 免费在线观看不卡| 在线视频欧美精品| 国产欧美综合在线观看第十页 | 日韩一级片网站| 亚洲精品视频免费观看| 国产一区二区三区在线观看精品 | 国产河南妇女毛片精品久久久| 欧美综合一区二区三区| 欧美高清在线视频| 香蕉久久夜色精品国产使用方法| 国产夫妻精品视频| 日韩欧美www| 日韩国产欧美在线观看| 91麻豆成人久久精品二区三区| 日韩精品一区二| 亚洲成av人影院| 色综合中文综合网| 欧美精品色一区二区三区| 中文字幕免费一区| 精品一区二区在线观看| 欧美喷水一区二区| 亚洲男女毛片无遮挡| 国产精品一二三| 精品入口麻豆88视频| 婷婷国产在线综合| 欧美视频完全免费看| 一区二区三区四区视频精品免费| 成人永久aaa| 久久久美女毛片| 美女网站色91| 日韩免费看的电影| 日韩精品91亚洲二区在线观看| 欧美中文一区二区三区| 亚洲激情五月婷婷| 色综合久久久久综合99| 国产精品久久久久一区二区三区| 国产成人精品免费| 国产色爱av资源综合区| 国产乱一区二区| 国产欧美日韩激情| 成+人+亚洲+综合天堂| 亚洲免费观看高清完整版在线观看| 国产69精品一区二区亚洲孕妇| 中文字幕欧美日本乱码一线二线 |