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

📄 libmng_chunk_io.c

📁 奇趣公司比较新的qt/emd版本
💻 C
📖 第 1 页 / 共 5 页
字号:
                                       /* check chunk against signature */  if ((pDescr->eImgtype == mng_it_mng) && (pData->eSigtype != mng_it_mng))    MNG_ERROR (pData, MNG_CHUNKNOTALLOWED);  if ((pDescr->eImgtype == mng_it_jng) && (pData->eSigtype == mng_it_png))    MNG_ERROR (pData, MNG_CHUNKNOTALLOWED);                                       /* empties allowed ? */  if ((iRawlen == 0) && (!(pDescr->iAllowed & MNG_DESCR_EMPTY)))    MNG_ERROR (pData, MNG_INVALIDLENGTH);  if ((pData->eImagetype != mng_it_mng) || (!(pDescr->iAllowed & MNG_DESCR_GLOBAL)))  {                                    /* *a* header required ? */    if ((pDescr->iMusthaves & MNG_DESCR_GenHDR) &&#ifdef MNG_INCLUDE_JNG        (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) && (!pData->bHasJHDR))#else        (!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR))#endif      MNG_ERROR (pData, MNG_SEQUENCEERROR);#ifdef MNG_INCLUDE_JNG    if ((pDescr->iMusthaves & MNG_DESCR_JngHDR) &&        (!pData->bHasDHDR) && (!pData->bHasJHDR))      MNG_ERROR (pData, MNG_SEQUENCEERROR);#endif  }                                       /* specific chunk pre-requisite ? */  if (((pDescr->iMusthaves & MNG_DESCR_IHDR) && (!pData->bHasIHDR)) ||#ifdef MNG_INCLUDE_JNG      ((pDescr->iMusthaves & MNG_DESCR_JHDR) && (!pData->bHasJHDR)) ||#endif      ((pDescr->iMusthaves & MNG_DESCR_DHDR) && (!pData->bHasDHDR)) ||      ((pDescr->iMusthaves & MNG_DESCR_LOOP) && (!pData->bHasLOOP)) ||      ((pDescr->iMusthaves & MNG_DESCR_PLTE) && (!pData->bHasPLTE)) ||      ((pDescr->iMusthaves & MNG_DESCR_MHDR) && (!pData->bHasMHDR)) ||      ((pDescr->iMusthaves & MNG_DESCR_SAVE) && (!pData->bHasSAVE))   )    MNG_ERROR (pData, MNG_SEQUENCEERROR);                                       /* specific chunk undesired ? */  if (((pDescr->iMustNOThaves & MNG_DESCR_NOIHDR) && (pData->bHasIHDR)) ||      ((pDescr->iMustNOThaves & MNG_DESCR_NOBASI) && (pData->bHasBASI)) ||      ((pDescr->iMustNOThaves & MNG_DESCR_NODHDR) && (pData->bHasDHDR)) ||      ((pDescr->iMustNOThaves & MNG_DESCR_NOIDAT) && (pData->bHasIDAT)) ||      ((pDescr->iMustNOThaves & MNG_DESCR_NOPLTE) && (pData->bHasPLTE)) ||#ifdef MNG_INCLUDE_JNG      ((pDescr->iMustNOThaves & MNG_DESCR_NOJHDR) && (pData->bHasJHDR)) ||      ((pDescr->iMustNOThaves & MNG_DESCR_NOJDAT) && (pData->bHasJDAT)) ||      ((pDescr->iMustNOThaves & MNG_DESCR_NOJDAA) && (pData->bHasJDAA)) ||      ((pDescr->iMustNOThaves & MNG_DESCR_NOJSEP) && (pData->bHasJSEP)) ||#endif      ((pDescr->iMustNOThaves & MNG_DESCR_NOMHDR) && (pData->bHasMHDR)) ||      ((pDescr->iMustNOThaves & MNG_DESCR_NOLOOP) && (pData->bHasLOOP)) ||      ((pDescr->iMustNOThaves & MNG_DESCR_NOTERM) && (pData->bHasTERM)) ||      ((pDescr->iMustNOThaves & MNG_DESCR_NOSAVE) && (pData->bHasSAVE))   )    MNG_ERROR (pData, MNG_SEQUENCEERROR);  if (pData->eSigtype == mng_it_mng)   /* check global and embedded empty chunks */  {#ifdef MNG_INCLUDE_JNG    if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR) || (pData->bHasJHDR))#else    if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR))#endif    {      if ((iRawlen == 0) && (!(pDescr->iAllowed & MNG_DESCR_EMPTYEMBED)))        MNG_ERROR (pData, MNG_INVALIDLENGTH);    } else {      if ((iRawlen == 0) && (!(pDescr->iAllowed & MNG_DESCR_EMPTYGLOBAL)))        MNG_ERROR (pData, MNG_INVALIDLENGTH);    }  }  if (pDescr->pSpecialfunc)            /* need special processing ? */  {    iRetcode = create_chunk_storage (pData, pHeader, iRawlen, pRawdata,                                     pField, iFields, ppChunk, MNG_TRUE);    if (iRetcode)                      /* on error bail out */      return iRetcode;                                       /* empty indicator ? */    if ((!iRawlen) && (pDescr->iOffsetempty))      *(((mng_uint8p)*ppChunk)+pDescr->iOffsetempty) = MNG_TRUE;    iRetcode = pDescr->pSpecialfunc(pData, *ppChunk);    if (iRetcode)                      /* on error bail out */      return iRetcode;    if ((((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_IDAT) ||        (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_JDAT) ||        (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_JDAA)    )    {      iRetcode = ((mng_chunk_headerp)*ppChunk)->fCleanup (pData, *ppChunk);      if (iRetcode)                    /* on error bail out */        return iRetcode;      *ppChunk = MNG_NULL;    } else {#ifdef MNG_STORE_CHUNKS      if (!pData->bStorechunks)#endif      {        iRetcode = ((mng_chunk_headerp)*ppChunk)->fCleanup (pData, *ppChunk);        if (iRetcode)                  /* on error bail out */          return iRetcode;        *ppChunk = MNG_NULL;      }    }  }#ifdef MNG_SUPPORT_DISPLAY  if (iRawlen)  {#ifdef MNG_OPTIMIZE_DISPLAYCALLS    pData->iRawlen  = iRawlen;    pData->pRawdata = pRawdata;#endif                                       /* display processing */#ifndef MNG_OPTIMIZE_DISPLAYCALLS    if (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_IDAT)      iRetcode = mng_process_display_idat (pData, iRawlen, pRawdata);#ifdef MNG_INCLUDE_JNG    else    if (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_JDAT)      iRetcode = mng_process_display_jdat (pData, iRawlen, pRawdata);    else    if (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_JDAA)      iRetcode = mng_process_display_jdaa (pData, iRawlen, pRawdata);#endif#else    if (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_IDAT)      iRetcode = mng_process_display_idat (pData);#ifdef MNG_INCLUDE_JNG    else    if (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_JDAT)      iRetcode = mng_process_display_jdat (pData);    else    if (((mng_chunk_headerp)pHeader)->iChunkname == MNG_UINT_JDAA)      iRetcode = mng_process_display_jdaa (pData);#endif#endif    if (iRetcode)      return iRetcode;  }#endif /* MNG_SUPPORT_DISPLAY */#ifdef MNG_STORE_CHUNKS  if ((pData->bStorechunks) && (!(*ppChunk)))  {    iRetcode = create_chunk_storage (pData, pHeader, iRawlen, pRawdata,                                     pField, iFields, ppChunk, MNG_FALSE);    if (iRetcode)                      /* on error bail out */      return iRetcode;                                       /* empty indicator ? */    if ((!iRawlen) && (pDescr->iOffsetempty))      *(((mng_uint8p)*ppChunk)+pDescr->iOffsetempty) = MNG_TRUE;  }#endif /* MNG_STORE_CHUNKS */  return MNG_NOERROR;}/* ************************************************************************** */#endif /* MNG_OPTIMIZE_CHUNKREADER *//* ************************************************************************** */#ifndef MNG_OPTIMIZE_CHUNKREADERREAD_CHUNK (mng_read_ihdr){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_READ_IHDR, MNG_LC_START);#endif  if (iRawlen != 13)                   /* length oke ? */    MNG_ERROR (pData, MNG_INVALIDLENGTH);                                       /* only allowed inside PNG or MNG */  if ((pData->eSigtype != mng_it_png) && (pData->eSigtype != mng_it_mng))    MNG_ERROR (pData, MNG_CHUNKNOTALLOWED);                                       /* sequence checks */  if ((pData->eSigtype == mng_it_png) && (pData->iChunkseq > 1))    MNG_ERROR (pData, MNG_SEQUENCEERROR);#ifdef MNG_INCLUDE_JNG  if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasIDAT) || (pData->bHasJHDR))#else  if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasIDAT))#endif    MNG_ERROR (pData, MNG_SEQUENCEERROR);  pData->bHasIHDR      = MNG_TRUE;     /* indicate IHDR is present */                                       /* and store interesting fields */  if ((!pData->bHasDHDR) || (pData->iDeltatype == MNG_DELTATYPE_NOCHANGE))  {    pData->iDatawidth  = mng_get_uint32 (pRawdata);    pData->iDataheight = mng_get_uint32 (pRawdata+4);  }  pData->iBitdepth     = *(pRawdata+8);  pData->iColortype    = *(pRawdata+9);  pData->iCompression  = *(pRawdata+10);  pData->iFilter       = *(pRawdata+11);  pData->iInterlace    = *(pRawdata+12);#if defined(MNG_NO_1_2_4BIT_SUPPORT) || defined(MNG_NO_16BIT_SUPPORT)  pData->iPNGmult = 1;  pData->iPNGdepth = pData->iBitdepth;#endif#ifdef MNG_NO_1_2_4BIT_SUPPORT  if (pData->iBitdepth < 8)      pData->iBitdepth = 8;#endif#ifdef MNG_NO_16BIT_SUPPORT  if (pData->iBitdepth > 8)    {      pData->iBitdepth = 8;      pData->iPNGmult = 2;    }#endif  if ((pData->iBitdepth !=  8)      /* parameter validity checks */#ifndef MNG_NO_1_2_4BIT_SUPPORT      && (pData->iBitdepth !=  1) &&      (pData->iBitdepth !=  2) &&      (pData->iBitdepth !=  4)#endif#ifndef MNG_NO_16BIT_SUPPORT      && (pData->iBitdepth != 16)   #endif      )    MNG_ERROR (pData, MNG_INVALIDBITDEPTH);  if ((pData->iColortype != MNG_COLORTYPE_GRAY   ) &&      (pData->iColortype != MNG_COLORTYPE_RGB    ) &&      (pData->iColortype != MNG_COLORTYPE_INDEXED) &&      (pData->iColortype != MNG_COLORTYPE_GRAYA  ) &&      (pData->iColortype != MNG_COLORTYPE_RGBA   )    )    MNG_ERROR (pData, MNG_INVALIDCOLORTYPE);  if ((pData->iColortype == MNG_COLORTYPE_INDEXED) && (pData->iBitdepth > 8))    MNG_ERROR (pData, MNG_INVALIDBITDEPTH);  if (((pData->iColortype == MNG_COLORTYPE_RGB    ) ||       (pData->iColortype == MNG_COLORTYPE_GRAYA  ) ||       (pData->iColortype == MNG_COLORTYPE_RGBA   )    ) &&      (pData->iBitdepth < 8                            )    )    MNG_ERROR (pData, MNG_INVALIDBITDEPTH);  if (pData->iCompression != MNG_COMPRESSION_DEFLATE)    MNG_ERROR (pData, MNG_INVALIDCOMPRESS);#if defined(FILTER192) || defined(FILTER193)  if ((pData->iFilter != MNG_FILTER_ADAPTIVE ) &&#if defined(FILTER192) && defined(FILTER193)      (pData->iFilter != MNG_FILTER_DIFFERING) &&      (pData->iFilter != MNG_FILTER_NOFILTER )    )#else#ifdef FILTER192      (pData->iFilter != MNG_FILTER_DIFFERING)    )#else      (pData->iFilter != MNG_FILTER_NOFILTER )    )#endif#endif    MNG_ERROR (pData, MNG_INVALIDFILTER);#else  if (pData->iFilter)    MNG_ERROR (pData, MNG_INVALIDFILTER);#endif  if ((pData->iInterlace != MNG_INTERLACE_NONE ) &&      (pData->iInterlace != MNG_INTERLACE_ADAM7)    )    MNG_ERROR (pData, MNG_INVALIDINTERLACE);#ifdef MNG_SUPPORT_DISPLAY #ifndef MNG_NO_DELTA_PNG  if (pData->bHasDHDR)                 /* check the colortype for delta-images ! */  {    mng_imagedatap pBuf = ((mng_imagep)pData->pObjzero)->pImgbuf;    if (pData->iColortype != pBuf->iColortype)    {      if ( ( (pData->iColortype != MNG_COLORTYPE_INDEXED) ||             (pBuf->iColortype  == MNG_COLORTYPE_GRAY   )    ) &&           ( (pData->iColortype != MNG_COLORTYPE_GRAY   ) ||             (pBuf->iColortype  == MNG_COLORTYPE_INDEXED)    )    )        MNG_ERROR (pData, MNG_INVALIDCOLORTYPE);    }  }#endif#endif  if (!pData->bHasheader)              /* first chunk ? */  {    pData->bHasheader = MNG_TRUE;      /* we've got a header */

⌨️ 快捷键说明

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