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