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

📄 libmng_zlib.c

📁 奇趣公司比较新的qt/emd版本
💻 C
📖 第 1 页 / 共 2 页
字号:
          pSrc = pDest + pData->iRowsize - (4*pData->iRowsize+7)/8;          for (iX = pData->iRowsize; ;)          {            *pDest++ = (((*pSrc)>>4)&0x0f);            if (iX-- <= 0)              break;            *pDest++ = (((*pSrc)   )&0x0f);            if (iX-- <= 0)              break;            pSrc++;          }        }        if (pData->iPNGdepth < 8 && pData->iColortype == 0)        {          /* Expand samples to 8-bit by LBR */          mng_int32  iX;          mng_uint8p pSrc = pData->pWorkrow+1;          mng_uint8 multiplier[]={0,255,85,0,17,0,0,0,1};          for (iX = pData->iRowsize; iX > 0; iX--)              *pSrc++ *= multiplier[pData->iPNGdepth];        }#endif#ifdef MNG_NO_16BIT_SUPPORT        if (pData->iPNGdepth > 8)        {          /* Reduce Workrow to 8-bit */          mng_int32  iX;          mng_uint8p pSrc = pData->pWorkrow+1;          mng_uint8p pDest = pSrc;          for (iX = pData->iRowsize; iX > 0; iX--)          {            *pDest = *pSrc;            pDest++;            pSrc+=2;          }        }#endif#ifdef FILTER192                       /* has leveling info ? */        if (pData->iFilterofs == MNG_FILTER_DIFFERING)          iRslt = init_rowdiffering (pData);        else#endif          iRslt = MNG_NOERROR;                                       /* filter the row if necessary */        if ((!iRslt) && (pData->iFilterofs < pData->iPixelofs  ) &&                        (*(pData->pWorkrow + pData->iFilterofs))    )          iRslt = mng_filter_a_row (pData);        else          iRslt = MNG_NOERROR;                                       /* additional leveling/differing ? */        if ((!iRslt) && (pData->fDifferrow))        {          iRslt = ((mng_differrow)pData->fDifferrow) (pData);          pSwap           = pData->pWorkrow;          pData->pWorkrow = pData->pPrevrow;          pData->pPrevrow = pSwap;     /* make sure we're processing the right data */        }        if (!iRslt)        {#ifdef MNG_INCLUDE_JNG          if (pData->bHasJHDR)         /* is JNG alpha-channel ? */          {                            /* just store in object ? */            if ((!iRslt) && (pData->fStorerow))              iRslt = ((mng_storerow)pData->fStorerow)     (pData);          }          else#endif /* MNG_INCLUDE_JNG */          {                            /* process this row */            if ((!iRslt) && (pData->fProcessrow))              iRslt = ((mng_processrow)pData->fProcessrow) (pData);                                       /* store in object ? */            if ((!iRslt) && (pData->fStorerow))              iRslt = ((mng_storerow)pData->fStorerow)     (pData);                                       /* color correction ? */            if ((!iRslt) && (pData->fCorrectrow))              iRslt = ((mng_correctrow)pData->fCorrectrow) (pData);                                       /* slap onto canvas ? */            if ((!iRslt) && (pData->fDisplayrow))            {              iRslt = ((mng_displayrow)pData->fDisplayrow) (pData);              if (!iRslt)              /* check progressive display refresh */                iRslt = mng_display_progressive_check (pData);            }          }        }        if (iRslt)                     /* on error bail out */          MNG_ERROR (pData, iRslt);        if (!pData->fDifferrow)        /* swap row-pointers */        {          pSwap           = pData->pWorkrow;          pData->pWorkrow = pData->pPrevrow;          pData->pPrevrow = pSwap;     /* so prev points to the processed row! */        }        iRslt = mng_next_row (pData);  /* adjust variables for next row */        if (iRslt)                     /* on error bail out */          MNG_ERROR (pData, iRslt);      }                                       /* let zlib know where to store next output */      pData->sZlib.next_out  = pData->pWorkrow;      pData->sZlib.avail_out = (uInt)(pData->iRowsize + pData->iPixelofs);#ifdef MNG_NO_1_2_4BIT_SUPPORT    if (pData->iPNGdepth < 8)       pData->sZlib.avail_out = (uInt)((pData->iPNGdepth*pData->iRowsize + 7)/8           + pData->iPixelofs);#endif#ifdef MNG_NO_16BIT_SUPPORT      if (pData->iPNGdepth > 8)        pData->sZlib.avail_out = (uInt)(2*pData->iRowsize + pData->iPixelofs);#endif    }  }                                    /* until some error or EOI                                          or all pixels received */  while ( (iZrslt == Z_OK) && (pData->sZlib.avail_in > 0)      &&          ( (pData->iRow < (mng_int32)pData->iDataheight) ||            ( (pData->iPass >= 0) && (pData->iPass < 7) )    )    );                                       /* on error bail out */  if ((iZrslt != Z_OK) && (iZrslt != Z_STREAM_END))    MNG_ERRORZ (pData, (mng_uint32)iZrslt);                                       /* too much data ? */  if ((iZrslt == Z_OK) && (pData->sZlib.avail_in > 0))    MNG_WARNING (pData, MNG_TOOMUCHIDAT);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_ZLIB_INFLATEROWS, MNG_LC_END);#endif  return MNG_NOERROR;}#endif /* MNG_SUPPORT_DISPLAY *//* ************************************************************************** */mng_retcode mngzlib_inflatedata (mng_datap  pData,                                 mng_uint32 iInlen,                                 mng_uint8p pIndata){  int iZrslt;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_ZLIB_INFLATEDATA, MNG_LC_START);#endif                                       /* let zlib know where to get stuff */  pData->sZlib.next_in   = pIndata;  pData->sZlib.avail_in  = (uInt)iInlen;                                       /* now inflate the data in one go! */  iZrslt = inflate (&pData->sZlib, Z_FINISH);                                       /* not enough room in output-buffer ? */  if ((iZrslt == Z_BUF_ERROR) || (pData->sZlib.avail_in > 0))    return MNG_BUFOVERFLOW;                                       /* on error bail out */  if ((iZrslt != Z_OK) && (iZrslt != Z_STREAM_END))    MNG_ERRORZ (pData, (mng_uint32)iZrslt);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_ZLIB_INFLATEDATA, MNG_LC_END);#endif  return MNG_NOERROR;}/* ************************************************************************** */mng_retcode mngzlib_inflatefree (mng_datap pData){  int iZrslt;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_ZLIB_INFLATEFREE, MNG_LC_START);#endif  pData->bInflating = MNG_FALSE;       /* stopped it */  iZrslt = inflateEnd (&pData->sZlib); /* let zlib cleanup its own stuff */  if (iZrslt != Z_OK)                  /* on error bail out */    MNG_ERRORZ (pData, (mng_uint32)iZrslt);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_ZLIB_INFLATEFREE, MNG_LC_END);#endif  return MNG_NOERROR;                  /* done */}/* ************************************************************************** */mng_retcode mngzlib_deflateinit (mng_datap pData){  int iZrslt;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_ZLIB_DEFLATEINIT, MNG_LC_START);#endif                                       /* initialize zlib structures and such */  iZrslt = deflateInit2 (&pData->sZlib, pData->iZlevel, pData->iZmethod,                         pData->iZwindowbits, pData->iZmemlevel,                         pData->iZstrategy);  if (iZrslt != Z_OK)                  /* on error bail out */    MNG_ERRORZ (pData, (mng_uint32)iZrslt);  pData->bDeflating = MNG_TRUE;        /* really deflating something now */#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_ZLIB_DEFLATEINIT, MNG_LC_END);#endif  return MNG_NOERROR;                  /* done */}/* ************************************************************************** */mng_retcode mngzlib_deflaterows (mng_datap  pData,                                 mng_uint32 iInlen,                                 mng_uint8p pIndata){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_ZLIB_DEFLATEROWS, MNG_LC_START);#endif#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_ZLIB_DEFLATEROWS, MNG_LC_END);#endif  return MNG_NOERROR;}/* ************************************************************************** */mng_retcode mngzlib_deflatedata (mng_datap  pData,                                 mng_uint32 iInlen,                                 mng_uint8p pIndata){  int iZrslt;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_ZLIB_DEFLATEDATA, MNG_LC_START);#endif  pData->sZlib.next_in  = pIndata;     /* let zlib know where to get stuff */  pData->sZlib.avail_in = (uInt)iInlen;                                       /* now deflate the data in one go! */  iZrslt = deflate (&pData->sZlib, Z_FINISH);                                       /* not enough room in output-buffer ? */  if ((iZrslt == Z_BUF_ERROR) || (pData->sZlib.avail_in > 0))    return MNG_BUFOVERFLOW;                                       /* on error bail out */  if ((iZrslt != Z_OK) && (iZrslt != Z_STREAM_END))    MNG_ERRORZ (pData, (mng_uint32)iZrslt);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_ZLIB_DEFLATEDATA, MNG_LC_END);#endif  return MNG_NOERROR;}/* ************************************************************************** */mng_retcode mngzlib_deflatefree (mng_datap pData){  int iZrslt;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_ZLIB_DEFLATEFREE, MNG_LC_START);#endif  iZrslt = deflateEnd (&pData->sZlib); /* let zlib cleanup it's own stuff */  if (iZrslt != Z_OK)                  /* on error bail out */    MNG_ERRORZ (pData, (mng_uint32)iZrslt);  pData->bDeflating = MNG_FALSE;       /* stopped it */#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_ZLIB_DEFLATEFREE, MNG_LC_END);#endif  return MNG_NOERROR;                  /* done */}/* ************************************************************************** */#endif /* MNG_INCLUDE_ZLIB *//* ************************************************************************** *//* * end of file                                                            * *//* ************************************************************************** */

⌨️ 快捷键说明

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