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

📄 libmng_object_prc.c

📁 Linux下的基于X11的图形开发环境。
💻 C
📖 第 1 页 / 共 5 页
字号:
      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 + -