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

📄 libmng_chunk_io.c

📁 奇趣公司比较新的qt/emd版本
💻 C
📖 第 1 页 / 共 5 页
字号:
    pData->eImagetype = mng_it_png;    /* then this must be a PNG */    pData->iWidth     = pData->iDatawidth;    pData->iHeight    = pData->iDataheight;                                       /* predict alpha-depth ! */    if ((pData->iColortype == MNG_COLORTYPE_GRAYA  ) ||        (pData->iColortype == MNG_COLORTYPE_RGBA   )    )      pData->iAlphadepth = pData->iBitdepth;    else    if (pData->iColortype == MNG_COLORTYPE_INDEXED)      pData->iAlphadepth = 8;          /* worst case scenario */    else      pData->iAlphadepth = 1;  /* Possible tRNS cheap binary transparency */                                       /* fits on maximum canvas ? */    if ((pData->iWidth > pData->iMaxwidth) || (pData->iHeight > pData->iMaxheight))      MNG_WARNING (pData, MNG_IMAGETOOLARGE);    if (pData->fProcessheader)         /* inform the app ? */      if (!pData->fProcessheader (((mng_handle)pData), pData->iWidth, pData->iHeight))        MNG_ERROR (pData, MNG_APPMISCERROR);  }  if (!pData->bHasDHDR)    pData->iImagelevel++;              /* one level deeper */#ifdef MNG_SUPPORT_DISPLAY  {    mng_retcode iRetcode = mng_process_display_ihdr (pData);    if (iRetcode)                      /* on error bail out */      return iRetcode;  }#endif /* MNG_SUPPORT_DISPLAY */#ifdef MNG_STORE_CHUNKS  if (pData->bStorechunks)  {                                    /* initialize storage */    mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk);    if (iRetcode)                      /* on error bail out */      return iRetcode;                                       /* fill the fields */    ((mng_ihdrp)*ppChunk)->iWidth       = mng_get_uint32 (pRawdata);    ((mng_ihdrp)*ppChunk)->iHeight      = mng_get_uint32 (pRawdata+4);    ((mng_ihdrp)*ppChunk)->iBitdepth    = pData->iBitdepth;    ((mng_ihdrp)*ppChunk)->iColortype   = pData->iColortype;    ((mng_ihdrp)*ppChunk)->iCompression = pData->iCompression;    ((mng_ihdrp)*ppChunk)->iFilter      = pData->iFilter;    ((mng_ihdrp)*ppChunk)->iInterlace   = pData->iInterlace;  }#endif /* MNG_STORE_CHUNKS */#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_READ_IHDR, MNG_LC_END);#endif  return MNG_NOERROR;                  /* done */}#endif /* MNG_OPTIMIZE_CHUNKREADER *//* ************************************************************************** */#ifndef MNG_OPTIMIZE_CHUNKREADERREAD_CHUNK (mng_read_plte){#if defined(MNG_SUPPORT_DISPLAY) || defined(MNG_STORE_CHUNKS)  mng_uint32  iX;  mng_uint8p  pRawdata2;#endif#ifdef MNG_SUPPORT_DISPLAY  mng_uint32  iRawlen2;#endif#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_READ_PLTE, MNG_LC_START);#endif                                       /* sequence checks */  if ((!pData->bHasMHDR) && (!pData->bHasIHDR) &&      (!pData->bHasBASI) && (!pData->bHasDHDR)    )    MNG_ERROR (pData, MNG_SEQUENCEERROR);#ifdef MNG_INCLUDE_JNG  if ((pData->bHasIDAT) || (pData->bHasJHDR))#else  if (pData->bHasIDAT)#endif      MNG_ERROR (pData, MNG_SEQUENCEERROR);                                       /* multiple PLTE only inside BASI */  if ((pData->bHasPLTE) && (!pData->bHasBASI))    MNG_ERROR (pData, MNG_MULTIPLEERROR);                                       /* length must be multiple of 3 */  if (((iRawlen % 3) != 0) || (iRawlen > 768))    MNG_ERROR (pData, MNG_INVALIDLENGTH);  if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR))  {                                    /* only allowed for indexed-color or                                          rgb(a)-color! */    if ((pData->iColortype != 2) && (pData->iColortype != 3) && (pData->iColortype != 6))      MNG_ERROR (pData, MNG_CHUNKNOTALLOWED);                                       /* empty only allowed if global present */    if ((iRawlen == 0) && (!pData->bHasglobalPLTE))        MNG_ERROR (pData, MNG_CANNOTBEEMPTY);  }  else  {    if (iRawlen == 0)                  /* cannot be empty as global! */      MNG_ERROR (pData, MNG_CANNOTBEEMPTY);  }  if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR))    pData->bHasPLTE = MNG_TRUE;        /* got it! */  else    pData->bHasglobalPLTE = MNG_TRUE;  pData->iPLTEcount = iRawlen / 3;  #ifdef MNG_SUPPORT_DISPLAY  if ((pData->bHasIHDR) || (pData->bHasBASI) || (pData->bHasDHDR))  {    mng_imagep     pImage;    mng_imagedatap pBuf;#ifndef MNG_NO_DELTA_PNG    if (pData->bHasDHDR)               /* processing delta-image ? */    {                                  /* store in object 0 !!! */      pImage           = (mng_imagep)pData->pObjzero;      pBuf             = pImage->pImgbuf;      pBuf->bHasPLTE   = MNG_TRUE;     /* it's definitely got a PLTE now */      pBuf->iPLTEcount = iRawlen / 3;  /* this is the exact length */      pRawdata2        = pRawdata;     /* copy the entries */      for (iX = 0; iX < iRawlen / 3; iX++)      {        pBuf->aPLTEentries[iX].iRed   = *pRawdata2;        pBuf->aPLTEentries[iX].iGreen = *(pRawdata2+1);        pBuf->aPLTEentries[iX].iBlue  = *(pRawdata2+2);        pRawdata2 += 3;      }    }    else#endif    {                                  /* get the current object */      pImage = (mng_imagep)pData->pCurrentobj;      if (!pImage)                     /* no object then dump it in obj 0 */        pImage = (mng_imagep)pData->pObjzero;      pBuf = pImage->pImgbuf;          /* address the object buffer */      pBuf->bHasPLTE = MNG_TRUE;       /* and tell it it's got a PLTE now */      if (!iRawlen)                    /* if empty, inherit from global */      {        pBuf->iPLTEcount = pData->iGlobalPLTEcount;        MNG_COPY (pBuf->aPLTEentries, pData->aGlobalPLTEentries,                  sizeof (pBuf->aPLTEentries));        if (pData->bHasglobalTRNS)     /* also copy global tRNS ? */        {                              /* indicate tRNS available */          pBuf->bHasTRNS = MNG_TRUE;          iRawlen2  = pData->iGlobalTRNSrawlen;          pRawdata2 = (mng_uint8p)(pData->aGlobalTRNSrawdata);                                       /* global length oke ? */          if ((iRawlen2 == 0) || (iRawlen2 > pBuf->iPLTEcount))            MNG_ERROR (pData, MNG_GLOBALLENGTHERR);                                       /* copy it */          pBuf->iTRNScount = iRawlen2;          MNG_COPY (pBuf->aTRNSentries, pRawdata2, iRawlen2);        }      }      else      {                                /* store fields for future reference */        pBuf->iPLTEcount = iRawlen / 3;        pRawdata2        = pRawdata;        for (iX = 0; iX < pBuf->iPLTEcount; iX++)        {          pBuf->aPLTEentries[iX].iRed   = *pRawdata2;          pBuf->aPLTEentries[iX].iGreen = *(pRawdata2+1);          pBuf->aPLTEentries[iX].iBlue  = *(pRawdata2+2);          pRawdata2 += 3;        }      }    }  }  else                                 /* store as global */  {    pData->iGlobalPLTEcount = iRawlen / 3;    pRawdata2               = pRawdata;    for (iX = 0; iX < pData->iGlobalPLTEcount; iX++)    {      pData->aGlobalPLTEentries[iX].iRed   = *pRawdata2;      pData->aGlobalPLTEentries[iX].iGreen = *(pRawdata2+1);      pData->aGlobalPLTEentries[iX].iBlue  = *(pRawdata2+2);      pRawdata2 += 3;    }    {                                  /* create an animation object */      mng_retcode iRetcode = mng_create_ani_plte (pData, pData->iGlobalPLTEcount,                                                  pData->aGlobalPLTEentries);      if (iRetcode)                    /* on error bail out */        return iRetcode;    }  }#endif /* MNG_SUPPORT_DISPLAY */#ifdef MNG_STORE_CHUNKS  if (pData->bStorechunks)  {                                    /* initialize storage */    mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk);    if (iRetcode)                      /* on error bail out */      return iRetcode;                                       /* store the fields */    ((mng_pltep)*ppChunk)->bEmpty      = (mng_bool)(iRawlen == 0);    ((mng_pltep)*ppChunk)->iEntrycount = iRawlen / 3;    pRawdata2                          = pRawdata;    for (iX = 0; iX < ((mng_pltep)*ppChunk)->iEntrycount; iX++)    {      ((mng_pltep)*ppChunk)->aEntries[iX].iRed   = *pRawdata2;      ((mng_pltep)*ppChunk)->aEntries[iX].iGreen = *(pRawdata2+1);      ((mng_pltep)*ppChunk)->aEntries[iX].iBlue  = *(pRawdata2+2);      pRawdata2 += 3;    }  }#endif /* MNG_STORE_CHUNKS */#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_READ_PLTE, MNG_LC_END);#endif  return MNG_NOERROR;                  /* done */}#endif /* MNG_OPTIMIZE_CHUNKREADER *//* ************************************************************************** */#ifndef MNG_OPTIMIZE_CHUNKREADERREAD_CHUNK (mng_read_idat){#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_READ_IDAT, MNG_LC_START);#endif#ifdef MNG_INCLUDE_JNG                 /* sequence checks */  if ((!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR) && (!pData->bHasJHDR))#else  if ((!pData->bHasIHDR) && (!pData->bHasBASI) && (!pData->bHasDHDR))#endif    MNG_ERROR (pData, MNG_SEQUENCEERROR);#ifdef MNG_INCLUDE_JNG  if ((pData->bHasJHDR) &&      (pData->iJHDRalphacompression != MNG_COMPRESSION_DEFLATE))    MNG_ERROR (pData, MNG_SEQUENCEERROR);  if (pData->bHasJSEP)    MNG_ERROR (pData, MNG_SEQUENCEERROR);#endif                                       /* not allowed for deltatype NO_CHANGE */#ifndef MNG_NO_DELTA_PNG  if ((pData->bHasDHDR) && ((pData->iDeltatype == MNG_DELTATYPE_NOCHANGE)))    MNG_ERROR (pData, MNG_CHUNKNOTALLOWED);#endif                                       /* can only be empty in BASI-block! */  if ((iRawlen == 0) && (!pData->bHasBASI))    MNG_ERROR (pData, MNG_INVALIDLENGTH);                                       /* indexed-color requires PLTE */  if ((pData->bHasIHDR) && (pData->iColortype == 3) && (!pData->bHasPLTE))    MNG_ERROR (pData, MNG_PLTEMISSING);  pData->bHasIDAT = MNG_TRUE;          /* got some IDAT now, don't we */#ifdef MNG_SUPPORT_DISPLAY  if (iRawlen)  {                                    /* display processing */    mng_retcode iRetcode = mng_process_display_idat (pData, iRawlen, pRawdata);    if (iRetcode)                      /* on error bail out */      return iRetcode;  }#endif /* MNG_SUPPORT_DISPLAY */#ifdef MNG_STORE_CHUNKS  if (pData->bStorechunks)  {                                    /* initialize storage */    mng_retcode iRetcode = ((mng_chunk_headerp)pHeader)->fCreate (pData, pHeader, ppChunk);    if (iRetcode)                      /* on error bail out */      r

⌨️ 快捷键说明

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