📄 libmng_object_prc.c
字号:
pSource->iPosy = pSource->iPosy + iLocationy; } } if (iId) /* not for object 0 */ { /* find previous lower object-id */ pPrev = (mng_imagep)pData->pLastimgobj; while ((pPrev) && (pPrev->iId > iId)) pPrev = (mng_imagep)pPrev->sHeader.pPrev; /* different from current ? */ if (pPrev != (mng_imagep)pSource->sHeader.pPrev) { if (pSource->sHeader.pPrev) /* unlink from current position !! */ ((mng_imagep)pSource->sHeader.pPrev)->sHeader.pNext = pSource->sHeader.pNext; else pData->pFirstimgobj = pSource->sHeader.pNext; if (pSource->sHeader.pNext) ((mng_imagep)pSource->sHeader.pNext)->sHeader.pPrev = pSource->sHeader.pPrev; else pData->pLastimgobj = pSource->sHeader.pPrev; if (pPrev) /* found the previous ? */ { /* than link it in place */ pSource->sHeader.pPrev = pPrev; pSource->sHeader.pNext = pPrev->sHeader.pNext; pPrev->sHeader.pNext = pSource; } else /* if not found, it becomes the first ! */ { pSource->sHeader.pNext = pData->pFirstimgobj; pData->pFirstimgobj = pSource; } pNext = (mng_imagep)pSource->sHeader.pNext; if (pNext) pNext->sHeader.pPrev = pSource; else pData->pLastimgobj = pSource; } } pSource->iId = iId; /* now set the new id! */ if (bAbstract) /* force it to abstract ? */ pSource->pImgbuf->bConcrete = MNG_FALSE;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RENUM_IMGOBJECT, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode reset_object_details (mng_datap pData, mng_imagep pImage, mng_uint32 iWidth, mng_uint32 iHeight, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iCompression, mng_uint8 iFilter, mng_uint8 iInterlace, mng_bool bResetall){ mng_imagedatap pBuf = pImage->pImgbuf; mng_uint32 iSamplesize = 0; mng_uint32 iRowsize; mng_uint32 iImgdatasize;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESET_OBJECTDETAILS, MNG_LC_START)#endif pBuf->iWidth = iWidth; /* set buffer characteristics */ pBuf->iHeight = iHeight; pBuf->iBitdepth = iBitdepth; pBuf->iColortype = iColortype; pBuf->iCompression = iCompression; pBuf->iFilter = iFilter; pBuf->iInterlace = iInterlace; pBuf->iAlphabitdepth = 0; /* determine samplesize from color_type/bit_depth */ switch (iColortype) /* for < 8-bit samples we just reserve 8 bits */ { case 0 : ; /* gray */ case 8 : { /* JPEG gray */ if (iBitdepth > 8) iSamplesize = 2; else iSamplesize = 1; break; } case 2 : ; /* rgb */ case 10 : { /* JPEG rgb */ if (iBitdepth > 8) iSamplesize = 6; else iSamplesize = 3; break; } case 3 : { /* indexed */ iSamplesize = 1; break; } case 4 : ; /* gray+alpha */ case 12 : { /* JPEG gray+alpha */ if (iBitdepth > 8) iSamplesize = 4; else iSamplesize = 2; break; } case 6 : ; /* rgb+alpha */ case 14 : { /* JPEG rgb+alpha */ if (iBitdepth > 8) iSamplesize = 8; else iSamplesize = 4; break; } } iRowsize = iSamplesize * iWidth; iImgdatasize = iRowsize * iHeight; /* buffer size changed ? */ if (iImgdatasize != pBuf->iImgdatasize) { /* drop the old one */ MNG_FREE (pData, pBuf->pImgdata, pBuf->iImgdatasize) if (iImgdatasize) /* allocate new sample-buffer ? */ MNG_ALLOC (pData, pBuf->pImgdata, iImgdatasize) } pBuf->iSamplesize = iSamplesize; /* remember new sizes */ pBuf->iRowsize = iRowsize; pBuf->iImgdatasize = iImgdatasize; /* dimension set and clipping not ? */ if ((iWidth) && (iHeight) && (!pImage->bClipped)) { pImage->iClipl = 0; /* set clipping to dimension by default */ pImage->iClipr = iWidth; pImage->iClipt = 0; pImage->iClipb = iHeight; } if (pImage->iId) /* reset magnification info ? */ { pImage->iMAGN_MethodX = 0; pImage->iMAGN_MethodY = 0; pImage->iMAGN_MX = 0; pImage->iMAGN_MY = 0; pImage->iMAGN_ML = 0; pImage->iMAGN_MR = 0; pImage->iMAGN_MT = 0; pImage->iMAGN_MB = 0; } if (bResetall) /* reset the other characteristics ? */ { pBuf->bHasPLTE = MNG_FALSE; pBuf->bHasTRNS = MNG_FALSE; pBuf->bHasGAMA = pData->bHasglobalGAMA; pBuf->bHasCHRM = pData->bHasglobalCHRM; pBuf->bHasSRGB = pData->bHasglobalSRGB; pBuf->bHasICCP = pData->bHasglobalICCP; pBuf->bHasBKGD = pData->bHasglobalBKGD; if (pBuf->iProfilesize) /* drop possibly old ICC profile */ { MNG_FREE (pData, pBuf->pProfile, pBuf->iProfilesize) pBuf->iProfilesize = 0; } if (pData->bHasglobalGAMA) /* global gAMA present ? */ pBuf->iGamma = pData->iGlobalGamma; if (pData->bHasglobalCHRM) /* global cHRM present ? */ { pBuf->iWhitepointx = pData->iGlobalWhitepointx; pBuf->iWhitepointy = pData->iGlobalWhitepointy; pBuf->iPrimaryredx = pData->iGlobalPrimaryredx; pBuf->iPrimaryredy = pData->iGlobalPrimaryredy; pBuf->iPrimarygreenx = pData->iGlobalPrimarygreenx; pBuf->iPrimarygreeny = pData->iGlobalPrimarygreeny; pBuf->iPrimarybluex = pData->iGlobalPrimarybluex; pBuf->iPrimarybluey = pData->iGlobalPrimarybluey; } if (pData->bHasglobalSRGB) /* global sRGB present ? */ pBuf->iRenderingintent = pData->iGlobalRendintent; if (pData->bHasglobalICCP) /* global iCCP present ? */ { if (pData->iGlobalProfilesize) { MNG_ALLOC (pData, pBuf->pProfile, pData->iGlobalProfilesize) MNG_COPY (pBuf->pProfile, pData->pGlobalProfile, pData->iGlobalProfilesize) } pBuf->iProfilesize = pData->iGlobalProfilesize; } if (pData->bHasglobalBKGD) /* global bKGD present ? */ { pBuf->iBKGDred = pData->iGlobalBKGDred; pBuf->iBKGDgreen = pData->iGlobalBKGDgreen; pBuf->iBKGDblue = pData->iGlobalBKGDblue; } }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_RESET_OBJECTDETAILS, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode promote_imageobject (mng_datap pData, mng_imagep pImage, mng_uint8 iBitdepth, mng_uint8 iColortype, mng_uint8 iFilltype){ mng_uint8p pNewbuf; mng_uint32 iNewbufsize; mng_uint32 iNewrowsize; mng_uint32 iNewsamplesize; mng_uint32 iX, iY; mng_uint8p pSrcline, pDstline; mng_uint8 iB; mng_imagedatap pBuf = pImage->pImgbuf; mng_uint32 iW = pBuf->iWidth; mng_uint32 iH = pBuf->iHeight;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_IMGOBJECT, MNG_LC_START)#endif if ((pBuf->iColortype == 3) && (iColortype == 2)) { /* indexed -> rgb */ iNewsamplesize = 3; iNewrowsize = iW * iNewsamplesize; iNewbufsize = iH * iNewrowsize; MNG_ALLOC (pData, pNewbuf, iNewbufsize) pSrcline = pBuf->pImgdata; pDstline = pNewbuf; for (iY = 0; iY < iH; iY++) { for (iX = 0; iX < iW; iX++) { iB = *pSrcline; if ((mng_uint32)iB < pBuf->iPLTEcount) { *pDstline = pBuf->aPLTEentries [iB].iRed; *(pDstline+1) = pBuf->aPLTEentries [iB].iGreen; *(pDstline+2) = pBuf->aPLTEentries [iB].iBlue; } pSrcline++; pDstline += 3; } } MNG_FREEX (pData, pBuf->pImgdata, pBuf->iImgdatasize) pBuf->iBitdepth = iBitdepth; pBuf->iColortype = iColortype; pBuf->iSamplesize = iNewsamplesize; pBuf->iRowsize = iNewrowsize; pBuf->iImgdatasize = iNewbufsize; pBuf->pImgdata = pNewbuf; pBuf->bHasPLTE = MNG_FALSE; pBuf->bHasTRNS = MNG_FALSE; } else if ((pBuf->iColortype == 3) && (iColortype == 6)) { /* indexed -> rgba */ iNewsamplesize = 4; iNewrowsize = iW * iNewsamplesize; iNewbufsize = iH * iNewrowsize; MNG_ALLOC (pData, pNewbuf, iNewbufsize) pSrcline = pBuf->pImgdata; pDstline = pNewbuf; for (iY = 0; iY < iH; iY++) { for (iX = 0; iX < iW; iX++) { iB = *pSrcline; if ((mng_uint32)iB < pBuf->iPLTEcount) { *pDstline = pBuf->aPLTEentries [iB].iRed; *(pDstline+1) = pBuf->aPLTEentries [iB].iGreen; *(pDstline+2) = pBuf->aPLTEentries [iB].iBlue; if ((mng_uint32)iB < pBuf->iTRNScount) *(pDstline+3) = pBuf->aTRNSentries [iB]; else *(pDstline+3) = 255; } pSrcline++; pDstline += 4; } } MNG_FREEX (pData, pBuf->pImgdata, pBuf->iImgdatasize) pBuf->iBitdepth = iBitdepth; pBuf->iColortype = iColortype; pBuf->iSamplesize = iNewsamplesize; pBuf->iRowsize = iNewrowsize; pBuf->iImgdatasize = iNewbufsize; pBuf->pImgdata = pNewbuf; pBuf->bHasPLTE = MNG_FALSE; pBuf->bHasTRNS = MNG_FALSE; } else { /* TODO: other promotion */ }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_PROMOTE_IMGOBJECT, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode magnify_imageobject (mng_datap pData, mng_imagep pImage){ mng_uint8p pNewdata; mng_uint8p pSrcline1; mng_uint8p pSrcline2; mng_uint8p pTempline; mng_uint8p pDstline; mng_uint32 iNewrowsize; mng_uint32 iNewsize; mng_uint32 iY; mng_int32 iS, iM; mng_retcode iRetcode; mng_imagedatap pBuf = pImage->pImgbuf;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -