📄 libmng_display.c
字号:
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 + -