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

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

?? pngwio.c

?? 一款最完整的工業組態軟源代碼
?? C
字號:

/* pngwio.c - functions for data output
 *
 * libpng 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.)
 *
 * This file provides a location for all output.  Users who need
 * special handling are expected to write functions that have the same
 * arguments as these and perform similar functions, but that possibly
 * use different output methods.  Note that you shouldn't change these
 * functions, but rather write replacement functions and then change
 * them at run time with png_set_write_fn(...).
 */

#define PNG_INTERNAL
#include "png.h"
#ifdef PNG_WRITE_SUPPORTED

/* Write the data to whatever output you are using.  The default routine
   writes to a file pointer.  Note that this routine sometimes gets called
   with very small lengths, so you should implement some kind of simple
   buffering if you are using unbuffered writes.  This should never be asked
   to write more than 64K on a 16 bit machine.  */

void /* PRIVATE */
png_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
{
   if (png_ptr->write_data_fn != NULL )
      (*(png_ptr->write_data_fn))(png_ptr, data, length);
   else
      png_error(png_ptr, "Call to NULL write function");
}

#if !defined(PNG_NO_STDIO)
/* This is the function that does the actual writing of data.  If you are
   not writing to a standard C stream, you should create a replacement
   write_data function and use it at run time with png_set_write_fn(), rather
   than changing the library. */
#ifndef USE_FAR_KEYWORD
void PNGAPI
png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
{
   png_uint_32 check;

#if defined(_WIN32_WCE)
   if ( !WriteFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) )
      check = 0;
#else
   check = fwrite(data, 1, length, (png_FILE_p)(png_ptr->io_ptr));
#endif
   if (check != length)
      png_error(png_ptr, "Write Error");
}
#else
/* this is the model-independent version. Since the standard I/O library
   can't handle far buffers in the medium and small models, we have to copy
   the data.
*/

#define NEAR_BUF_SIZE 1024
#define MIN(a,b) (a <= b ? a : b)

void PNGAPI
png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
{
   png_uint_32 check;
   png_byte *near_data;  /* Needs to be "png_byte *" instead of "png_bytep" */
   png_FILE_p io_ptr;

   /* Check if data really is near. If so, use usual code. */
   near_data = (png_byte *)CVT_PTR_NOCHECK(data);
   io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr);
   if ((png_bytep)near_data == data)
   {
#if defined(_WIN32_WCE)
      if ( !WriteFile(io_ptr, near_data, length, &check, NULL) )
         check = 0;
#else
      check = fwrite(near_data, 1, length, io_ptr);
#endif
   }
   else
   {
      png_byte buf[NEAR_BUF_SIZE];
      png_size_t written, remaining, err;
      check = 0;
      remaining = length;
      do
      {
         written = MIN(NEAR_BUF_SIZE, remaining);
         png_memcpy(buf, data, written); /* copy far buffer to near buffer */
#if defined(_WIN32_WCE)
         if ( !WriteFile(io_ptr, buf, written, &err, NULL) )
            err = 0;
#else
         err = fwrite(buf, 1, written, io_ptr);
#endif
         if (err != written)
            break;
         else
            check += err;
         data += written;
         remaining -= written;
      }
      while (remaining != 0);
   }
   if (check != length)
      png_error(png_ptr, "Write Error");
}

#endif
#endif

/* This function is called to output any data pending writing (normally
   to disk).  After png_flush is called, there should be no data pending
   writing in any buffers. */
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
void /* PRIVATE */
png_flush(png_structp png_ptr)
{
   if (png_ptr->output_flush_fn != NULL)
      (*(png_ptr->output_flush_fn))(png_ptr);
}

#if !defined(PNG_NO_STDIO)
void PNGAPI
png_default_flush(png_structp png_ptr)
{
#if !defined(_WIN32_WCE)
   png_FILE_p io_ptr;
   io_ptr = (png_FILE_p)CVT_PTR((png_ptr->io_ptr));
   if (io_ptr != NULL)
      fflush(io_ptr);
#endif
}
#endif
#endif

/* This function allows the application to supply new output functions for
   libpng if standard C streams aren't being used.

   This function takes as its arguments:
   png_ptr       - pointer to a png output data structure
   io_ptr        - pointer to user supplied structure containing info about
                   the output functions.  May be NULL.
   write_data_fn - pointer to a new output function that takes as its
                   arguments a pointer to a png_struct, a pointer to
                   data to be written, and a 32-bit unsigned int that is
                   the number of bytes to be written.  The new write
                   function should call png_error(png_ptr, "Error msg")
                   to exit and output any fatal error messages.
   flush_data_fn - pointer to a new flush function that takes as its
                   arguments a pointer to a png_struct.  After a call to
                   the flush function, there should be no data in any buffers
                   or pending transmission.  If the output method doesn't do
                   any buffering of ouput, a function prototype must still be
                   supplied although it doesn't have to do anything.  If
                   PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile
                   time, output_flush_fn will be ignored, although it must be
                   supplied for compatibility. */
void PNGAPI
png_set_write_fn(png_structp png_ptr, png_voidp io_ptr,
   png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)
{
   png_ptr->io_ptr = io_ptr;

#if !defined(PNG_NO_STDIO)
   if (write_data_fn != NULL)
      png_ptr->write_data_fn = write_data_fn;
   else
      png_ptr->write_data_fn = png_default_write_data;
#else
   png_ptr->write_data_fn = write_data_fn;
#endif

#if defined(PNG_WRITE_FLUSH_SUPPORTED)
#if !defined(PNG_NO_STDIO)
   if (output_flush_fn != NULL)
      png_ptr->output_flush_fn = output_flush_fn;
   else
      png_ptr->output_flush_fn = png_default_flush;
#else
   png_ptr->output_flush_fn = output_flush_fn;
#endif
#endif /* PNG_WRITE_FLUSH_SUPPORTED */

   /* It is an error to read while writing a png file */
   if (png_ptr->read_data_fn != NULL)
   {
      png_ptr->read_data_fn = NULL;
      png_warning(png_ptr,
         "Attempted to set both read_data_fn and write_data_fn in");
      png_warning(png_ptr,
         "the same structure.  Resetting read_data_fn to NULL.");
   }
}

#if defined(USE_FAR_KEYWORD)
#if defined(_MSC_VER)
void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check)
{
   void *near_ptr;
   void FAR *far_ptr;
   FP_OFF(near_ptr) = FP_OFF(ptr);
   far_ptr = (void FAR *)near_ptr;
   if(check != 0)
      if(FP_SEG(ptr) != FP_SEG(far_ptr))
         png_error(png_ptr,"segment lost in conversion");
   return(near_ptr);
}
#  else
void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check)
{
   void *near_ptr;
   void FAR *far_ptr;
   near_ptr = (void FAR *)ptr;
   far_ptr = (void FAR *)near_ptr;
   if(check != 0)
      if(far_ptr != ptr)
         png_error(png_ptr,"segment lost in conversion");
   return(near_ptr);
}
#   endif
#   endif
#endif /* PNG_WRITE_SUPPORTED */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国女主播成人在线| 五月天婷婷综合| 欧美一区二区三区啪啪| 成人午夜av影视| 免费成人av在线| 亚洲人成亚洲人成在线观看图片| 3d成人动漫网站| 99久久99久久精品免费观看 | 亚洲欧美在线高清| 日韩三级伦理片妻子的秘密按摩| av中文字幕不卡| 国产老女人精品毛片久久| 亚洲在线视频网站| 国产精品色婷婷| 久久久久久久久久电影| 欧美精品第一页| 在线一区二区三区四区| 成人av网在线| 国产·精品毛片| 国产精品综合视频| 韩国av一区二区三区| 日日夜夜免费精品| 亚洲国产日韩一级| 一区二区成人在线| 亚洲区小说区图片区qvod| 国产精品无人区| 国产精品水嫩水嫩| 国产无一区二区| 久久久国际精品| 国产蜜臀97一区二区三区| 欧美一区二区三区四区久久| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 国产日韩欧美综合在线| 精品日韩99亚洲| 欧美一区二区播放| 精品免费99久久| 日韩精品在线网站| 精品国产成人系列| 精品国产一区二区三区四区四| 欧美日韩国产色站一区二区三区| 在线精品视频免费播放| 91视频在线观看| 91在线视频官网| 91污片在线观看| 91传媒视频在线播放| 91成人在线免费观看| 欧美日韩免费一区二区三区| 欧美日韩视频不卡| 在线不卡中文字幕播放| 欧美日韩国产一级| 日韩视频在线一区二区| 精品毛片乱码1区2区3区| 26uuu亚洲| 国产精品久久久久久久浪潮网站| 中文天堂在线一区| 亚洲精品高清视频在线观看| 亚洲一级二级三级| 日韩影视精彩在线| 久久成人18免费观看| 国产福利视频一区二区三区| 成人的网站免费观看| 欧洲av在线精品| 欧美一区二区三级| 久久久国产综合精品女国产盗摄| 国产精品久久久爽爽爽麻豆色哟哟| 《视频一区视频二区| 亚洲国产精品人人做人人爽| 免费成人在线观看视频| 国产夫妻精品视频| 在线免费观看日韩欧美| 日韩欧美国产不卡| 中文字幕一区二区三区四区| 一区二区三区四区在线| 日本 国产 欧美色综合| 国产不卡视频在线观看| 色激情天天射综合网| 日韩欧美亚洲国产精品字幕久久久| 久久久www免费人成精品| 亚洲私人黄色宅男| 日韩av电影免费观看高清完整版| 99视频在线精品| 欧美日韩不卡在线| 精品国产欧美一区二区| 综合电影一区二区三区| 美女精品自拍一二三四| 91色综合久久久久婷婷| 日韩精品最新网址| 亚洲欧洲国产日本综合| 美国一区二区三区在线播放| 色综合天天综合网国产成人综合天 | 国产欧美日韩精品在线| 一区二区三区日韩精品| 国产一区二区影院| 欧美日韩国产高清一区二区| 久久久精品影视| 亚洲成av人影院| 成人h动漫精品一区二区| 日韩欧美一二区| 午夜视频一区二区| 色综合久久中文字幕| 久久久久88色偷偷免费| 日本欧美一区二区三区乱码| 色妹子一区二区| 欧美—级在线免费片| 久久国产婷婷国产香蕉| 欧美日韩三级视频| 亚洲日本成人在线观看| 岛国精品在线播放| 精品免费日韩av| 日本最新不卡在线| 欧美图片一区二区三区| 欧美国产1区2区| 久久国产婷婷国产香蕉| 欧美系列亚洲系列| 国产精品乱人伦| 国产精品亚洲一区二区三区妖精 | 成人免费小视频| 国产一区免费电影| 欧美一区二区三区视频| 亚洲高清三级视频| a级高清视频欧美日韩| 欧美国产激情二区三区| 久久国产生活片100| 欧美一卡二卡三卡四卡| 亚洲视频一区二区在线| 99精品欧美一区二区三区小说| 91精品国产综合久久蜜臀| 亚洲大片一区二区三区| a级高清视频欧美日韩| 国产精品欧美极品| 天天色图综合网| 欧美日韩黄色影视| 国产精品久久久久久久蜜臀 | 五月综合激情网| 欧美在线观看一区| 亚洲人成网站在线| 欧洲精品在线观看| 一色屋精品亚洲香蕉网站| av网站免费线看精品| 欧美高清在线一区| 91亚洲午夜精品久久久久久| 日本一区二区视频在线| 粉嫩一区二区三区性色av| 欧美日韩电影在线| 日本va欧美va精品发布| 欧美午夜理伦三级在线观看| 亚洲综合视频在线观看| 欧美日本国产视频| 亚洲国产欧美在线| 在线欧美日韩国产| 亚洲一区精品在线| 91精品国产91热久久久做人人| 婷婷综合久久一区二区三区| 正在播放一区二区| 日韩和欧美的一区| 精品国产一区二区三区久久久蜜月 | 欧美丰满美乳xxx高潮www| 日韩成人免费在线| 欧美一级国产精品| 国产成人综合亚洲网站| 久久久久久久精| 色综合天天综合狠狠| 日韩精品高清不卡| 欧美大白屁股肥臀xxxxxx| 国产福利一区二区| 中文字幕视频一区| 51精品秘密在线观看| 老司机免费视频一区二区| 欧美精品一区视频| 福利一区在线观看| 欧美激情一区二区三区全黄| 成人av午夜电影| 亚洲在线中文字幕| 久久久国际精品| 成人福利在线看| 亚洲综合一区二区| 2017欧美狠狠色| 成人爱爱电影网址| 日本特黄久久久高潮| 久久欧美一区二区| 欧美视频在线一区二区三区| 亚洲情趣在线观看| 精品久久久久久久久久久久久久久 | 视频一区二区国产| 精品国产不卡一区二区三区| 色综合婷婷久久| 亚洲大片精品永久免费| 国产校园另类小说区| 欧美揉bbbbb揉bbbbb| 国产呦精品一区二区三区网站| 亚洲激情在线播放| 制服丝袜在线91| av亚洲精华国产精华| 精品一区二区国语对白| 国产精品美女久久久久久| 欧美日韩久久久一区| 美女一区二区视频| 一区二区三区中文在线| 国产亚洲成aⅴ人片在线观看 | 亚洲二区在线视频|