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

📄 libmng_display.c

📁 奇趣公司比较新的qt/emd版本
💻 C
📖 第 1 页 / 共 5 页
字号:
        if (!iCliptype)                /* absolute ? */        {          pData->iFRAMclipl = iClipl;          pData->iFRAMclipr = iClipr;          pData->iFRAMclipt = iClipt;          pData->iFRAMclipb = iClipb;        }        else                           /* relative */        {          pData->iFRAMclipl = pData->iFRAMclipl + iClipl;          pData->iFRAMclipr = pData->iFRAMclipr + iClipr;          pData->iFRAMclipt = pData->iFRAMclipt + iClipt;          pData->iFRAMclipb = pData->iFRAMclipb + iClipb;        }      }    }    else    {                                  /* reload defaults */      pData->bFrameclipping = pData->bFRAMclipping;      pData->iFrameclipl    = pData->iFRAMclipl;      pData->iFrameclipr    = pData->iFRAMclipr;      pData->iFrameclipt    = pData->iFRAMclipt;      pData->iFrameclipb    = pData->iFRAMclipb;    }#endif  }  if (!pData->bTimerset)               /* timer still off ? */  {    if (#ifndef MNG_SKIPCHUNK_FRAM       (pData->iFramemode == 4) ||    /* insert background layer after a new frame */#endif        (!pData->iLayerseq))           /* and certainly before the very first layer */      iRetcode = load_bkgdlayer (pData);    if (iRetcode)                      /* on error bail out */      return iRetcode;    pData->iFrameseq++;                /* count the frame ! */    pData->bFramedone = MNG_TRUE;      /* and indicate we've done one */  }#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_NEXT_FRAME, MNG_LC_END);#endif  return MNG_NOERROR;}/* ************************************************************************** */MNG_LOCAL mng_retcode next_layer (mng_datap pData){  mng_imagep  pImage;  mng_retcode iRetcode = MNG_NOERROR;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_NEXT_LAYER, MNG_LC_START);#endif#ifndef MNG_SKIPCHUNK_FRAM  if (!pData->iBreakpoint)             /* no previous break here ? */  {                                    /* interframe delay required ? */    if ((pData->eImagetype == mng_it_mng) && (pData->iLayerseq) &&        ((pData->iFramemode == 1) || (pData->iFramemode == 3)))      iRetcode = interframe_delay (pData);    else      pData->iFramedelay = pData->iNextdelay;    if (iRetcode)                      /* on error bail out */      return iRetcode;  }#endif  if (!pData->bTimerset)               /* timer still off ? */  {    if (!pData->iLayerseq)             /* restore background for the very first layer ? */    {                                  /* wait till IDAT/JDAT for PNGs & JNGs !!! */      if ((pData->eImagetype == mng_it_png) || (pData->eImagetype == mng_it_jng))        pData->bRestorebkgd = MNG_TRUE;      else      {                                /* for MNG we do it right away */        iRetcode = load_bkgdlayer (pData);        pData->iLayerseq++;            /* and it counts as a layer then ! */      }    }#ifndef MNG_SKIPCHUNK_FRAM    else    if (pData->iFramemode == 3)        /* restore background for each layer ? */      iRetcode = load_bkgdlayer (pData);#endif    if (iRetcode)                      /* on error bail out */      return iRetcode;#ifndef MNG_NO_DELTA_PNG    if (pData->bHasDHDR)               /* processing a delta-image ? */      pImage = (mng_imagep)pData->pDeltaImage;    else#endif      pImage = (mng_imagep)pData->pCurrentobj;    if (!pImage)                       /* not an active object ? */      pImage = (mng_imagep)pData->pObjzero;                                       /* determine display rectangle */    pData->iDestl   = MAX_COORD ((mng_int32)0,   pImage->iPosx);    pData->iDestt   = MAX_COORD ((mng_int32)0,   pImage->iPosy);                                       /* is it a valid buffer ? */    if ((pImage->pImgbuf->iWidth) && (pImage->pImgbuf->iHeight))    {      pData->iDestr = MIN_COORD ((mng_int32)pData->iWidth,                                 pImage->iPosx + (mng_int32)pImage->pImgbuf->iWidth );      pData->iDestb = MIN_COORD ((mng_int32)pData->iHeight,                                 pImage->iPosy + (mng_int32)pImage->pImgbuf->iHeight);    }    else                               /* it's a single image ! */    {      pData->iDestr = MIN_COORD ((mng_int32)pData->iWidth,                                 (mng_int32)pData->iDatawidth );      pData->iDestb = MIN_COORD ((mng_int32)pData->iHeight,                                 (mng_int32)pData->iDataheight);    }#ifndef MNG_SKIPCHUNK_FRAM    if (pData->bFrameclipping)         /* frame clipping specified ? */    {      pData->iDestl = MAX_COORD (pData->iDestl,  pData->iFrameclipl);      pData->iDestt = MAX_COORD (pData->iDestt,  pData->iFrameclipt);      pData->iDestr = MIN_COORD (pData->iDestr,  pData->iFrameclipr);      pData->iDestb = MIN_COORD (pData->iDestb,  pData->iFrameclipb);    }#endif    if (pImage->bClipped)              /* is the image clipped itself ? */    {      pData->iDestl = MAX_COORD (pData->iDestl,  pImage->iClipl);      pData->iDestt = MAX_COORD (pData->iDestt,  pImage->iClipt);      pData->iDestr = MIN_COORD (pData->iDestr,  pImage->iClipr);      pData->iDestb = MIN_COORD (pData->iDestb,  pImage->iClipb);    }                                       /* determine source starting point */    pData->iSourcel = MAX_COORD ((mng_int32)0,   pData->iDestl - pImage->iPosx);    pData->iSourcet = MAX_COORD ((mng_int32)0,   pData->iDestt - pImage->iPosy);    if ((pImage->pImgbuf->iWidth) && (pImage->pImgbuf->iHeight))    {                                  /* and maximum size  */      pData->iSourcer = MIN_COORD ((mng_int32)pImage->pImgbuf->iWidth,                                   pData->iSourcel + pData->iDestr - pData->iDestl);      pData->iSourceb = MIN_COORD ((mng_int32)pImage->pImgbuf->iHeight,                                   pData->iSourcet + pData->iDestb - pData->iDestt);    }    else                               /* it's a single image ! */    {      pData->iSourcer = pData->iSourcel + pData->iDestr - pData->iDestl;      pData->iSourceb = pData->iSourcet + pData->iDestb - pData->iDestt;    }    pData->iLayerseq++;                /* count the layer ! */  }#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_NEXT_LAYER, MNG_LC_END);#endif  return MNG_NOERROR;}/* ************************************************************************** */mng_retcode mng_display_image (mng_datap  pData,                               mng_imagep pImage,                               mng_bool   bLayeradvanced){  mng_retcode iRetcode;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_DISPLAY_IMAGE, MNG_LC_START);#endif                                       /* actively running ? */#ifndef MNG_SKIPCHUNK_MAGN  if (((pData->bRunning) || (pData->bSearching)) && (!pData->bSkipping))  {    if ( (!pData->iBreakpoint) &&      /* needs magnification ? */         ( (pImage->iMAGN_MethodX) || (pImage->iMAGN_MethodY) ) )    {      iRetcode = mng_magnify_imageobject (pData, pImage);      if (iRetcode)                    /* on error bail out */        return iRetcode;    }  }#endif  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;    pData->iLayerseq++;                /* and it counts as a layer then ! */  }                                       /* actively running ? */  if (((pData->bRunning) || (pData->bSearching)) && (!pData->bSkipping))  {    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 : {#ifndef MNG_NO_16BIT_SUPPORT                      if (pImage->pImgbuf->iBitdepth > 8)                        pData->fRetrieverow = (mng_fptr)mng_retrieve_g16;                      else#endif                        pData->fRetrieverow = (mng_fptr)mng_retrieve_g8;                      pData->bIsOpaque      = (mng_bool)(!pImage->pImgbuf->bHasTRNS);                      break;                    }          case  2 : {#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_bool)(!pImage->pImgbuf->bHasTRNS);                      break;                    }          case  3 : { pData->fRetrieverow   = (mng_fptr)mng_retrieve_idx8;                      pData->bIsOpaque      = (mng_bool)(!pImage->pImgbuf->bHasTRNS);                      break;                    }          case  4 : {#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  6 : {#ifndef MNG_NO_16BIT_SUPPORT                      if (pImage->pImgbuf->iBitdepth > 8)                        pData->fRetrieverow = (mng_fptr)mng_retrieve_rgba16;                      else#endif                        pData->fRetrieverow = (mng_fptr)mng_retriev

⌨️ 快捷键说明

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