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

📄 libmng_display.c

📁 Linux下的基于X11的图形开发环境。
💻 C
📖 第 1 页 / 共 5 页
字号:
      pBuftarget->iPrimarybluey  = pBufdelta->iPrimarybluey;    }    if (pBufdelta->bHasSRGB)           /* sRGB in delta ? */    {                                  /* drop it onto the target */      pBuftarget->bHasSRGB         = MNG_TRUE;      pBuftarget->iRenderingintent = pBufdelta->iRenderingintent;    }    if (pBufdelta->bHasICCP)           /* ICC profile in delta ? */    {      pBuftarget->bHasICCP = MNG_TRUE; /* drop it onto the target */      if (pBuftarget->pProfile)        /* profile existed ? */        MNG_FREEX (pData, pBuftarget->pProfile, pBuftarget->iProfilesize)                                       /* allocate a buffer & copy it */      MNG_ALLOC (pData, pBuftarget->pProfile, pBufdelta->iProfilesize)      MNG_COPY  (pBuftarget->pProfile, pBufdelta->pProfile, pBufdelta->iProfilesize)                                       /* store it's length as well */      pBuftarget->iProfilesize = pBufdelta->iProfilesize;    }                                       /* need to execute delta pixels ? */    if ((!pData->bDeltaimmediate) && (pData->iDeltatype != MNG_DELTATYPE_NOCHANGE))    {      pData->fScalerow = MNG_NULL;     /* not needed by default */      switch (pBuftarget->iBitdepth)   /* determine scaling routine */      {      }      pData->fDeltarow = MNG_NULL;     /* let's assume there's nothing to do */      switch (pBuftarget->iColortype)  /* determine delta processing routine */      {        case  0 : ;        case  8 : {                     /* gray */                    if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE          ) ||                        (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD    ) ||                        (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE)    )                    {                      if ((pBufdelta->iColortype == 0) || (pBufdelta->iColortype == 3) ||                          (pBufdelta->iColortype == 8))                      {                        switch (pBuftarget->iBitdepth)                        {                          case  1 : { pData->fDeltarow = (mng_fptr)delta_g1_g1;   break; }                          case  2 : { pData->fDeltarow = (mng_fptr)delta_g2_g2;   break; }                          case  4 : { pData->fDeltarow = (mng_fptr)delta_g4_g4;   break; }                          case  8 : { pData->fDeltarow = (mng_fptr)delta_g8_g8;   break; }                          case 16 : { pData->fDeltarow = (mng_fptr)delta_g16_g16; break; }                        }                      }                    }                    break;                  }        case  2 : ;        case 10 : {                     /* rgb */                    if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE          ) ||                        (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD    ) ||                        (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE)    )                    {                      if ((pBufdelta->iColortype == 2) || (pBufdelta->iColortype == 10))                      {                        switch (pBuftarget->iBitdepth)                        {                          case  8 : { pData->fDeltarow = (mng_fptr)delta_rgb8_rgb8;   break; }                          case 16 : { pData->fDeltarow = (mng_fptr)delta_rgb16_rgb16; break; }                        }                      }                    }                    break;                  }        case  3 : {                     /* indexed; abuse gray routines */                    if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE          ) ||                        (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD    ) ||                        (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE)    )                    {                      if ((pBufdelta->iColortype == 0) || (pBufdelta->iColortype == 3))                      {                        switch (pBuftarget->iBitdepth)                        {                          case  1 : { pData->fDeltarow = (mng_fptr)delta_g1_g1; break; }                          case  2 : { pData->fDeltarow = (mng_fptr)delta_g2_g2; break; }                          case  4 : { pData->fDeltarow = (mng_fptr)delta_g4_g4; break; }                          case  8 : { pData->fDeltarow = (mng_fptr)delta_g8_g8; break; }                        }                      }                    }                    break;                  }        case  4 : ;        case 12 : {                     /* gray + alpha */                    if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE          ) ||                        (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD    ) ||                        (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE)    )                    {                      if ((pBufdelta->iColortype == 4) || (pBufdelta->iColortype == 12))                      {                        switch (pBuftarget->iBitdepth)                        {                          case  8 : { pData->fDeltarow = (mng_fptr)delta_ga8_ga8;   break; }                          case 16 : { pData->fDeltarow = (mng_fptr)delta_ga16_ga16; break; }                        }                      }                    }                    else                    if ((pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORADD    ) ||                        (pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORREPLACE)    )                    {                      if ((pBufdelta->iColortype == 0) || (pBufdelta->iColortype == 3) ||                          (pBufdelta->iColortype == 8))                      {                        switch (pBuftarget->iBitdepth)                        {                          case  8 : { pData->fDeltarow = (mng_fptr)delta_ga8_g8;   break; }                          case 16 : { pData->fDeltarow = (mng_fptr)delta_ga16_g16; break; }                        }                      }                    }                    else                    if ((pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAADD    ) ||                        (pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAREPLACE)    )                    {                      if ((pBufdelta->iColortype == 0) || (pBufdelta->iColortype == 3))                      {                        switch (pBuftarget->iBitdepth)                        {                          case  8 : { pData->fDeltarow = (mng_fptr)delta_ga8_a8;   break; }                          case 16 : { pData->fDeltarow = (mng_fptr)delta_ga16_a16; break; }                        }                      }                    }                    break;                  }        case  6 : ;        case 14 : {                     /* rgb + alpha */                    if ((pData->iDeltatype == MNG_DELTATYPE_REPLACE          ) ||                        (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELADD    ) ||                        (pData->iDeltatype == MNG_DELTATYPE_BLOCKPIXELREPLACE)    )                    {                      if ((pBufdelta->iColortype == 6) || (pBufdelta->iColortype == 14))                      {                        switch (pBuftarget->iBitdepth)                        {                          case  8 : { pData->fDeltarow = (mng_fptr)delta_rgba8_rgba8;   break; }                          case 16 : { pData->fDeltarow = (mng_fptr)delta_rgba16_rgba16; break; }                        }                      }                    }                    else                    if ((pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORADD    ) ||                        (pData->iDeltatype == MNG_DELTATYPE_BLOCKCOLORREPLACE)    )                    {                      if ((pBufdelta->iColortype == 2) || (pBufdelta->iColortype == 10))                      {                        switch (pBuftarget->iBitdepth)                        {                          case  8 : { pData->fDeltarow = (mng_fptr)delta_rgba8_rgb8;   break; }                          case 16 : { pData->fDeltarow = (mng_fptr)delta_rgba16_rgb16; break; }                        }                      }                    }                    else                    if ((pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAADD    ) ||                        (pData->iDeltatype == MNG_DELTATYPE_BLOCKALPHAREPLACE)    )                    {                      if ((pBufdelta->iColortype == 0) || (pBufdelta->iColortype == 3))                      {                        switch (pBuftarget->iBitdepth)                        {                          case  8 : { pData->fDeltarow = (mng_fptr)delta_rgba8_a8;   break; }                          case 16 : { pData->fDeltarow = (mng_fptr)delta_rgba16_a16; break; }                        }                      }                    }                    break;                  }      }      if (pData->fDeltarow)            /* do we need to take action ? */      {        pData->iPass        = -1;      /* setup row dimensions and stuff */        pData->iRow         = pData->iDeltaBlocky;        pData->iRowinc      = 1;        pData->iCol         = pData->iDeltaBlockx;        pData->iColinc      = 1;        pData->iRowsamples  = pBufdelta->iWidth;        pData->iRowsize     = pBuftarget->iRowsize;                                       /* indicate where to retrieve & where to store */        pData->pRetrieveobj = (mng_objectp)pDelta;        pData->pStoreobj    = (mng_objectp)pTarget;        if (pData->pRGBArow)           /* prevent duplicate allocation! */          MNG_FREE (pData, pData->pRGBArow, (pData->iDatawidth << 3))                                       /* get a temporary row-buffer */        MNG_ALLOC (pData, pData->pRGBArow, pBufdelta->iRowsize)        iY       = 0;                  /* this is where we start */        iRetcode = MNG_NOERROR;        /* still oke for now */        while ((!iRetcode) && (iY < pBufdelta->iHeight))        {                              /* get a row */          mng_uint8p pWork = pBufdelta->pImgdata + (iY * pBufdelta->iRowsize);          MNG_COPY (pData->pRGBArow, pWork, pBufdelta->iRowsize);          if (pData->fScalerow)        /* scale it (if necessary) */            iRetcode = ((mng_scalerow)pData->fScalerow) (pData);          if (!iRetcode)               /* and... execute it */            iRetcode = ((mng_deltarow)pData->fDeltarow) (pData);          if (!iRetcode)               /* adjust variables for next row */            iRetcode = next_row (pData);          iY++;                        /* and next line */        }                                       /* drop the temporary row-buffer */        MNG_FREE (pData, pData->pRGBArow, pBufdelta->iRowsize)        if (iRetcode)                  /* on error bail out */          return iRetcode;      }      else        MNG_ERROR (pData, MNG_INVALIDDELTA)    }  }#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_EXECUTE_DELTA_IMAGE, MNG_LC_END)#endif  return MNG_NOERROR;}/* ************************************************************************** */mng_retcode save_state (mng_datap pData){  mng_savedatap pSave;  mng_imagep    pImage;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_SAVE_STATE, MNG_LC_START)#endif  if (pData->pSavedata)                /* sanity check */    MNG_ERROR (pData, MNG_INTERNALERROR)                                       /* get a buffer for saving */  MNG_ALLOC (pData, pData->pSavedata, sizeof (mng_savedata))  pSave = pData->pSavedata;            /* address it more directly */                                       /* and copy global data from the main struct */#if defined(MNG_SUPPORT_READ) || defined(MNG_SUPPORT_WRITE)  pSave->bHasglobalPLTE       = pData->bHasglobalPLTE;  pSave->bHasglobalTRNS       = pData->bHasglobalTRNS;  pSave->bHasglobalGAMA       = pData->bHasglobalGAMA;  pSave->bHasglobalCHRM       = pData->bHasglobalCHRM;  pSave->bHasglobalSRGB       = pData->bHasglobalSRGB;  pSave->bHasglobalICCP       = pData->bHasglobalICCP;  pSave->bHasglobalBKGD       = pData->bHasglobalBKGD;#endif /* MNG_SUPPORT_READ || MNG_SUPPORT_WRITE */  pSave->iBACKred             = pData->iBACKred;  pSave->iBACKgreen           = pData->iBACKgreen;  pSave->iBACKblue            = pData->iBACKblue;  pSave->iBACKmandatory       = pData->iBACKmandatory;  pSave->iBACKimageid         = pData->iBACKimageid;  pSave->iBACKtile            = pData->iBACKtile;  pSave->iFRAMmode            = pData->iFRAMmode;  pSave->iFRAMdelay           = pData->iFRAMdelay;  pSave->iFRAMtimeout         = pData->iFRAMtimeout;  pSave->bFRAMclipping        = pData->bFRAMclipping;  pSave->iFRAMclipl           = pData->iFRAMclipl;  pSave->iFRAMclipr           = pData->iFRAMclipr;  pSave->iFRAMclipt           = pData->iFRAMclipt;  pSave->iFRAMclipb           = pData->iFRAMclipb;  pSave->iGlobalPLTEcount     = pData->iGlobalPLTEcount;  MNG_COPY (pSave

⌨️ 快捷键说明

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