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

📄 libmng_display.c

📁 奇趣公司比较新的qt/emd版本
💻 C
📖 第 1 页 / 共 5 页
字号:
                          break;                        }              case 10 : {#ifndef MNG_NO_16BIT_SUPPORT                          if (pImage->pImgbuf->iBitdepth > 8)                            pData->fRetrieverow = (mng_fptr)mng_retrieve_rgb16;                          else#endif                            pData->fRetrieverow = (mng_fptr)mng_retrieve_rgb8;                          pData->bIsOpaque      = MNG_TRUE;                          break;                        }              case 12 : {#ifndef MNG_NO_16BIT_SUPPORT                          if (pImage->pImgbuf->iBitdepth > 8)                            pData->fRetrieverow = (mng_fptr)mng_retrieve_ga16;                          else#endif                            pData->fRetrieverow = (mng_fptr)mng_retrieve_ga8;                          pData->bIsOpaque      = MNG_FALSE;                          break;                        }              case 14 : {#ifndef MNG_NO_16BIT_SUPPORT                          if (pImage->pImgbuf->iBitdepth > 8)                            pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba16;                          else#endif                            pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba8;                          pData->bIsOpaque      = MNG_FALSE;                          break;                        }            }#ifdef MNG_NO_CMS            iRetcode = MNG_NOERROR;#else#if defined(MNG_FULL_CMS)              /* determine color-management routine */            iRetcode = mng_init_full_cms   (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE);#elif defined(MNG_GAMMA_ONLY)            iRetcode = mng_init_gamma_only (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE);#elif defined(MNG_APP_CMS)            iRetcode = mng_init_app_cms    (pData, MNG_FALSE, MNG_FALSE, MNG_TRUE);#endif            if (iRetcode)              /* on error bail out */              return iRetcode;#endif /* MNG_NO_CMS */                                       /* get temporary row-buffers */            MNG_ALLOC (pData, pData->pPrevrow, pData->iRowsize);            MNG_ALLOC (pData, pData->pRGBArow, pData->iRowsize);            iY       = pData->iDestt;  /* this is where we start */            iRetcode = MNG_NOERROR;    /* so far, so good */            while ((!iRetcode) && (iY < pData->iDestb))            {                          /* restore a background row */              iRetcode = mng_restore_bkgd_backimage (pData);                                       /* color correction ? */              if ((!iRetcode) && (pData->fCorrectrow))                iRetcode = ((mng_correctrow)pData->fCorrectrow) (pData);              if (!iRetcode)           /* so... display it */                iRetcode = ((mng_displayrow)pData->fDisplayrow) (pData);              if (!iRetcode)                iRetcode = mng_next_row (pData);              iY++;                    /* and next line */            }                                       /* drop temporary row-buffers */            MNG_FREE (pData, pData->pRGBArow, pData->iRowsize);            MNG_FREE (pData, pData->pPrevrow, pData->iRowsize);            if (iRetcode)              /* on error bail out */              return iRetcode;#if defined(MNG_FULL_CMS)              /* cleanup cms stuff */            iRetcode = mng_clear_cms (pData);            if (iRetcode)              /* on error bail out */              return iRetcode;#endif          }        }      }#endif    }    pData->iDestl       = iDestl;      /* restore values */    pData->iDestr       = iDestr;    pData->iDestt       = iDestt;    pData->iDestb       = iDestb;    pData->iSourcel     = iSourcel;    pData->iSourcer     = iSourcer;    pData->iSourcet     = iSourcet;    pData->iSourceb     = iSourceb;    pData->iPass        = iPass;    pData->iRow         = iRow;    pData->iRowinc      = iRowinc;    pData->iCol         = iCol;    pData->iColinc      = iColinc;    pData->iRowsamples  = iRowsamples;    pData->iRowsize     = iRowsize;    pData->pPrevrow     = pPrevrow;    pData->pRGBArow     = pRGBArow;    pData->bIsRGBA16    = bIsRGBA16;    pData->bIsOpaque    = bIsOpaque;    pData->fCorrectrow  = fCorrectrow;    pData->fDisplayrow  = fDisplayrow;     pData->fRetrieverow = fRetrieverow;    pData->pCurrentobj  = pCurrentobj;    pData->pRetrieveobj = pRetrieveobj;  }#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_LOAD_BKGDLAYER, MNG_LC_END);#endif  return MNG_NOERROR;}/* ************************************************************************** */MNG_LOCAL mng_retcode clear_canvas (mng_datap pData){  mng_int32   iY;  mng_retcode iRetcode;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_CLEAR_CANVAS, MNG_LC_START);#endif  pData->iDestl      = 0;              /* clipping region is full canvas! */  pData->iDestt      = 0;  pData->iDestr      = pData->iWidth;  pData->iDestb      = pData->iHeight;  pData->iSourcel    = 0;              /* source is same as destination */  pData->iSourcer    = pData->iWidth;  pData->iSourcet    = 0;  pData->iSourceb    = pData->iHeight;  pData->iPass       = -1;             /* these are the object's dimensions now */  pData->iRow        = 0;  pData->iRowinc     = 1;  pData->iCol        = 0;  pData->iColinc     = 1;  pData->iRowsamples = pData->iWidth;  pData->iRowsize    = pData->iRowsamples << 2;  pData->bIsRGBA16   = MNG_FALSE;      /* let's keep it simple ! */  pData->bIsOpaque   = MNG_TRUE;  set_display_routine (pData);         /* determine display routine */                                       /* get a temporary row-buffer */                                       /* it's transparent black by default!! */  MNG_ALLOC (pData, pData->pRGBArow, pData->iRowsize);  iY       = pData->iDestt;            /* this is where we start */  iRetcode = MNG_NOERROR;              /* so far, so good */  while ((!iRetcode) && (iY < pData->iDestb))  {                                    /* clear a row then */    iRetcode = ((mng_displayrow)pData->fDisplayrow) (pData);    if (!iRetcode)      iRetcode = mng_next_row (pData); /* adjust variables for next row */    iY++;                              /* and next line */  }                                       /* drop the temporary row-buffer */  MNG_FREE (pData, pData->pRGBArow, pData->iRowsize);  if (iRetcode)                        /* on error bail out */    return iRetcode;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_CLEAR_CANVAS, MNG_LC_END);#endif  return MNG_NOERROR;}/* ************************************************************************** */MNG_LOCAL mng_retcode next_frame (mng_datap  pData,                                  mng_uint8  iFramemode,                                  mng_uint8  iChangedelay,                                  mng_uint32 iDelay,                                  mng_uint8  iChangetimeout,                                  mng_uint32 iTimeout,                                  mng_uint8  iChangeclipping,                                  mng_uint8  iCliptype,                                  mng_int32  iClipl,                                  mng_int32  iClipr,                                  mng_int32  iClipt,                                  mng_int32  iClipb){  mng_retcode iRetcode = MNG_NOERROR;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_NEXT_FRAME, MNG_LC_START);#endif  if (!pData->iBreakpoint)             /* no previous break here ? */  {#ifndef MNG_SKIPCHUNK_FRAM    mng_uint8 iOldmode = pData->iFramemode;                                       /* interframe delay required ? */    if ((iOldmode == 2) || (iOldmode == 4))    {      if ((pData->iFrameseq) && (iFramemode != 1) && (iFramemode != 3))        iRetcode = interframe_delay (pData);      else        pData->iFramedelay = pData->iNextdelay;    }    else    {                                  /* delay before inserting background layer? */      if ((pData->bFramedone) && (iFramemode == 4))        iRetcode = interframe_delay (pData);    }    if (iRetcode)                      /* on error bail out */      return iRetcode;                                       /* now we'll assume we're in the next frame! */    if (iFramemode)                    /* save the new framing mode ? */    {      pData->iFRAMmode  = iFramemode;      pData->iFramemode = iFramemode;    }    else                               /* reload default */      pData->iFramemode = pData->iFRAMmode;    if (iChangedelay)                  /* delay changed ? */    {      pData->iNextdelay = iDelay;      /* for *after* next subframe */      if ((iOldmode == 2) || (iOldmode == 4))        pData->iFramedelay = pData->iFRAMdelay;      if (iChangedelay == 2)           /* also overall ? */        pData->iFRAMdelay = iDelay;    }    else    {                                  /* reload default */      pData->iNextdelay = pData->iFRAMdelay;    }    if (iChangetimeout)                /* timeout changed ? */    {                                  /* for next subframe */      pData->iFrametimeout = iTimeout;      if ((iChangetimeout == 2) ||     /* also overall ? */          (iChangetimeout == 4) ||          (iChangetimeout == 6) ||          (iChangetimeout == 8))        pData->iFRAMtimeout = iTimeout;    }    else                               /* reload default */      pData->iFrametimeout = pData->iFRAMtimeout;    if (iChangeclipping)               /* clipping changed ? */    {      pData->bFrameclipping = MNG_TRUE;      if (!iCliptype)                  /* absolute ? */      {        pData->iFrameclipl = iClipl;        pData->iFrameclipr = iClipr;        pData->iFrameclipt = iClipt;        pData->iFrameclipb = iClipb;      }      else                             /* relative */      {        pData->iFrameclipl = pData->iFrameclipl + iClipl;        pData->iFrameclipr = pData->iFrameclipr + iClipr;        pData->iFrameclipt = pData->iFrameclipt + iClipt;        pData->iFrameclipb = pData->iFrameclipb + iClipb;      }      if (iChangeclipping == 2)        /* also overall ? */      {        pData->bFRAMclipping = MNG_TRUE;

⌨️ 快捷键说明

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