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

📄 libmng_display.c

📁 Linux下的基于X11的图形开发环境。
💻 C
📖 第 1 页 / 共 5 页
字号:
        return iRetcode;    }  }  pData->pRetrieveobj = pImage;        /* so retrieve-row and color-correction can find it */  if (!bLayeradvanced)                 /* need to advance the layer ? */  {    mng_imagep pSave    = pData->pCurrentobj;    pData->pCurrentobj  = pImage;    next_layer (pData);                /* advance to next layer */    pData->pCurrentobj  = pSave;  }                                       /* need to restore the background ? */  if ((!pData->bTimerset) && (pData->bRestorebkgd))  {    mng_imagep pSave    = pData->pCurrentobj;    pData->pCurrentobj  = pImage;    pData->bRestorebkgd = MNG_FALSE;    iRetcode            = load_bkgdlayer (pData);    pData->pCurrentobj  = pSave;    if (iRetcode)                      /* on error bail out */      return iRetcode;    if (pData->bRunning)      pData->iLayerseq++;              /* and it counts as a layer then ! */  }                                       /* actively running ? */  if ((pData->bRunning) && (!pData->bFreezing))  {    if (!pData->bTimerset)             /* all systems still go ? */    {      pData->iBreakpoint = 0;          /* let's make absolutely sure... */                                       /* anything to display ? */      if ((pData->iDestr >= pData->iDestl) && (pData->iDestb >= pData->iDestt))      {        mng_int32 iY;        set_display_routine (pData);   /* determine display routine */                                       /* and image-buffer retrieval routine */        switch (pImage->pImgbuf->iColortype)        {          case  0 : { if (pImage->pImgbuf->iBitdepth > 8)                        pData->fRetrieverow = (mng_fptr)retrieve_g16;                      else                        pData->fRetrieverow = (mng_fptr)retrieve_g8;                      pData->bIsOpaque      = (mng_bool)(!pImage->pImgbuf->bHasTRNS);                      break;                    }          case  2 : { if (pImage->pImgbuf->iBitdepth > 8)                        pData->fRetrieverow = (mng_fptr)retrieve_rgb16;                      else                        pData->fRetrieverow = (mng_fptr)retrieve_rgb8;                      pData->bIsOpaque      = (mng_bool)(!pImage->pImgbuf->bHasTRNS);                      break;                    }          case  3 : { pData->fRetrieverow   = (mng_fptr)retrieve_idx8;                      pData->bIsOpaque      = (mng_bool)(!pImage->pImgbuf->bHasTRNS);                      break;                    }          case  4 : { if (pImage->pImgbuf->iBitdepth > 8)                        pData->fRetrieverow = (mng_fptr)retrieve_ga16;                      else                        pData->fRetrieverow = (mng_fptr)retrieve_ga8;                      pData->bIsOpaque      = MNG_FALSE;                      break;                    }          case  6 : { if (pImage->pImgbuf->iBitdepth > 8)                        pData->fRetrieverow = (mng_fptr)retrieve_rgba16;                      else                        pData->fRetrieverow = (mng_fptr)retrieve_rgba8;                      pData->bIsOpaque      = MNG_FALSE;                      break;                    }          case  8 : { if (pImage->pImgbuf->iBitdepth > 8)                        pData->fRetrieverow = (mng_fptr)retrieve_g16;                      else                        pData->fRetrieverow = (mng_fptr)retrieve_g8;                      pData->bIsOpaque      = MNG_TRUE;                      break;                    }          case 10 : { if (pImage->pImgbuf->iBitdepth > 8)                        pData->fRetrieverow = (mng_fptr)retrieve_rgb16;                      else                        pData->fRetrieverow = (mng_fptr)retrieve_rgb8;                      pData->bIsOpaque      = MNG_TRUE;                      break;                    }          case 12 : { if (pImage->pImgbuf->iBitdepth > 8)                        pData->fRetrieverow = (mng_fptr)retrieve_ga16;                      else                        pData->fRetrieverow = (mng_fptr)retrieve_ga8;                      pData->bIsOpaque      = MNG_FALSE;                      break;                    }          case 14 : { if (pImage->pImgbuf->iBitdepth > 8)                        pData->fRetrieverow = (mng_fptr)retrieve_rgba16;                      else                        pData->fRetrieverow = (mng_fptr)retrieve_rgba8;                      pData->bIsOpaque      = MNG_FALSE;                      break;                    }        }        pData->iPass       = -1;       /* these are the object's dimensions now */        pData->iRow        = pData->iSourcet;        pData->iRowinc     = 1;        pData->iCol        = 0;        pData->iColinc     = 1;        pData->iRowsamples = pImage->pImgbuf->iWidth;        pData->iRowsize    = pData->iRowsamples << 2;        pData->bIsRGBA16   = MNG_FALSE;                                       /* adjust for 16-bit object ? */        if (pImage->pImgbuf->iBitdepth > 8)        {          pData->bIsRGBA16 = MNG_TRUE;          pData->iRowsize  = pData->iRowsamples << 3;        }        pData->fCorrectrow = MNG_NULL; /* default no color-correction */#ifdef MNG_NO_CMS        iRetcode = MNG_NOERROR;#else#if defined(MNG_FULL_CMS)              /* determine color-management routine */        iRetcode = init_full_cms_object   (pData);#elif defined(MNG_GAMMA_ONLY)        iRetcode = init_gamma_only_object (pData);#elif defined(MNG_APP_CMS)        iRetcode = init_app_cms_object    (pData);#endif        if (iRetcode)                  /* on error bail out */          return iRetcode;#endif /* MNG_NO_CMS */                                       /* get a temporary row-buffer */        MNG_ALLOC (pData, pData->pRGBArow, pData->iRowsize)        iY = pData->iSourcet;          /* this is where we start */        while ((!iRetcode) && (iY < pData->iSourceb))        {                              /* get a row */          iRetcode = ((mng_retrieverow)pData->fRetrieverow) (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)               /* adjust variables for next row */            iRetcode = next_row (pData);          iY++;                        /* and next line */        }                                       /* drop the temporary row-buffer */        MNG_FREE (pData, pData->pRGBArow, pData->iRowsize)        if (iRetcode)                  /* on error bail out */          return iRetcode;#if defined(MNG_INCLUDE_LCMS)          /* cleanup cms stuff */        iRetcode = mng_clear_cms (pData);        if (iRetcode)                  /* on error bail out */          return iRetcode;#endif      }    }  }#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_DISPLAY_IMAGE, MNG_LC_END)#endif  return MNG_NOERROR;                  /* whehehe, this is good ! */}/* ************************************************************************** */mng_retcode execute_delta_image (mng_datap  pData,                                 mng_imagep pTarget,                                 mng_imagep pDelta){  mng_imagedatap pBuftarget = pTarget->pImgbuf;  mng_imagedatap pBufdelta  = pDelta->pImgbuf;  mng_uint32     iY;  mng_retcode    iRetcode;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_EXECUTE_DELTA_IMAGE, MNG_LC_START)#endif                                       /* actively running ? */  if ((pData->bRunning) && (!pData->bFreezing))  {    if (pBufdelta->bHasPLTE)           /* palette in delta ? */    {      mng_uint32 iX;                                       /* new palette larger than old one ? */      if ((!pBuftarget->bHasPLTE) || (pBuftarget->iPLTEcount < pBufdelta->iPLTEcount))        pBuftarget->iPLTEcount = pBufdelta->iPLTEcount;                                       /* it's definitely got a PLTE now */      pBuftarget->bHasPLTE = MNG_TRUE;      for (iX = 0; iX < pBufdelta->iPLTEcount; iX++)      {        pBuftarget->aPLTEentries[iX].iRed   = pBufdelta->aPLTEentries[iX].iRed;        pBuftarget->aPLTEentries[iX].iGreen = pBufdelta->aPLTEentries[iX].iGreen;        pBuftarget->aPLTEentries[iX].iBlue  = pBufdelta->aPLTEentries[iX].iBlue;      }    }    if (pBufdelta->bHasTRNS)           /* cheap transparency in delta ? */    {      switch (pData->iColortype)       /* drop it into the target */      {        case 0: {                      /* gray */                  pBuftarget->iTRNSgray  = pBufdelta->iTRNSgray;                  pBuftarget->iTRNSred   = 0;                  pBuftarget->iTRNSgreen = 0;                  pBuftarget->iTRNSblue  = 0;                  pBuftarget->iTRNScount = 0;                  break;                }        case 2: {                      /* rgb */                  pBuftarget->iTRNSgray  = 0;                  pBuftarget->iTRNSred   = pBufdelta->iTRNSred;                  pBuftarget->iTRNSgreen = pBufdelta->iTRNSgreen;                  pBuftarget->iTRNSblue  = pBufdelta->iTRNSblue;                  pBuftarget->iTRNScount = 0;                  break;                }        case 3: {                      /* indexed */                  pBuftarget->iTRNSgray  = 0;                  pBuftarget->iTRNSred   = 0;                  pBuftarget->iTRNSgreen = 0;                  pBuftarget->iTRNSblue  = 0;                                       /* existing range smaller than new one ? */                  if ((!pBuftarget->bHasTRNS) || (pBuftarget->iTRNScount < pBufdelta->iTRNScount))                    pBuftarget->iTRNScount = pBufdelta->iTRNScount;                  MNG_COPY (pBuftarget->aTRNSentries, pBufdelta->aTRNSentries, pBufdelta->iTRNScount)                  break;                }      }      pBuftarget->bHasTRNS = MNG_TRUE; /* tell it it's got a tRNS now */    }    if (pBufdelta->bHasBKGD)           /* bkgd in source ? */    {                                  /* drop it onto the target */      pBuftarget->bHasBKGD   = MNG_TRUE;      pBuftarget->iBKGDindex = pBufdelta->iBKGDindex;      pBuftarget->iBKGDgray  = pBufdelta->iBKGDgray;      pBuftarget->iBKGDred   = pBufdelta->iBKGDred;      pBuftarget->iBKGDgreen = pBufdelta->iBKGDgreen;      pBuftarget->iBKGDblue  = pBufdelta->iBKGDblue;    }    if (pBufdelta->bHasGAMA)           /* gamma in source ? */    {      pBuftarget->bHasGAMA = MNG_TRUE; /* drop it onto the target */      pBuftarget->iGamma   = pBufdelta->iGamma;    }    if (pBufdelta->bHasCHRM)           /* chroma in delta ? */    {                                  /* drop it onto the target */      pBuftarget->bHasCHRM       = MNG_TRUE;      pBuftarget->iWhitepointx   = pBufdelta->iWhitepointx;      pBuftarget->iWhitepointy   = pBufdelta->iWhitepointy;      pBuftarget->iPrimaryredx   = pBufdelta->iPrimaryredx;      pBuftarget->iPrimaryredy   = pBufdelta->iPrimaryredy;      pBuftarget->iPrimarygreenx = pBufdelta->iPrimarygreenx;      pBuftarget->iPrimarygreeny = pBufdelta->iPrimarygreeny;      pBuftarget->iPrimarybluex  = pBufdelta->iPrimarybluex;

⌨️ 快捷键说明

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