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

📄 libmng_display.c

📁 奇趣公司比较新的qt/emd版本
💻 C
📖 第 1 页 / 共 5 页
字号:
    mng_fptr    fCorrectrow  = pData->fCorrectrow;    mng_fptr    fDisplayrow  = pData->fDisplayrow;    mng_fptr    fRetrieverow = pData->fRetrieverow;    mng_objectp pCurrentobj  = pData->pCurrentobj;    mng_objectp pRetrieveobj = pData->pRetrieveobj;    pData->iDestl   = 0;               /* determine clipping region */    pData->iDestt   = 0;    pData->iDestr   = pData->iWidth;    pData->iDestb   = pData->iHeight;#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                                       /* anything to clear ? */    if ((pData->iDestr >= pData->iDestl) && (pData->iDestb >= pData->iDestt))    {      pData->iPass       = -1;         /* these are the object's dimensions now */      pData->iRow        = 0;      pData->iRowinc     = 1;      pData->iCol        = 0;      pData->iColinc     = 1;      pData->iRowsamples = pData->iWidth;      pData->iRowsize    = pData->iRowsamples << 2;      pData->bIsRGBA16   = MNG_FALSE;  /* let's keep it simple ! */      pData->bIsOpaque   = MNG_TRUE;      pData->iSourcel    = 0;          /* source relative to destination */      pData->iSourcer    = pData->iDestr - pData->iDestl;      pData->iSourcet    = 0;      pData->iSourceb    = pData->iDestb - pData->iDestt;      set_display_routine (pData);     /* determine display routine */                                       /* default restore using preset BG color */      pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_bgcolor;#ifndef MNG_SKIPCHUNK_bKGD      if (((pData->eImagetype == mng_it_png) || (pData->eImagetype == mng_it_jng)) &&          (pData->bUseBKGD))      {                                /* prefer bKGD in PNG/JNG */        if (!pData->pCurrentobj)          pData->pCurrentobj = pData->pObjzero;        if (((mng_imagep)pData->pCurrentobj)->pImgbuf->bHasBKGD)        {          pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_bkgd;          bColorcorr          = MNG_TRUE;        }      }#endif      if (pData->fGetbkgdline)         /* background-canvas-access callback set ? */      {        switch (pData->iBkgdstyle)        {#ifndef MNG_SKIPCANVAS_RGB8          case MNG_CANVAS_RGB8    : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_rgb8;    break; }#endif#ifndef MNG_SKIPCANVAS_BGR8          case MNG_CANVAS_BGR8    : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_bgr8;    break; }#endif#ifndef MNG_SKIPCANVAS_BGRX8          case MNG_CANVAS_BGRX8   : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_bgrx8;   break; }#endif#ifndef MNG_SKIPCANVAS_BGR565          case MNG_CANVAS_BGR565  : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_bgr565;  break; }#endif#ifndef MNG_SKIPCANVAS_RGB565          case MNG_CANVAS_RGB565  : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_rgb565;  break; }#endif#ifndef MNG_NO_16BIT_SUPPORT  /*        case MNG_CANVAS_RGB16   : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_rgb16;   break; } */  /*        case MNG_CANVAS_BGR16   : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_bgr16;   break; } */#endif  /*        case MNG_CANVAS_INDEX8  : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_index8;  break; } */  /*        case MNG_CANVAS_GRAY8   : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_gray8;   break; } */#ifndef MNG_NO_16BIT_SUPPORT  /*        case MNG_CANVAS_GRAY16  : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_gray16;  break; } */#endif  /*        case MNG_CANVAS_DX15    : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_dx15;    break; } */  /*        case MNG_CANVAS_DX16    : { pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_dx16;    break; } */        }      }#ifndef MNG_SKIPCHUNK_BACK      if (pData->bHasBACK)      {                                /* background image ? */        if ((pData->iBACKmandatory & 0x02) && (pData->iBACKimageid))        {          pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_backcolor;          bColorcorr          = MNG_TRUE;        }        else                           /* background color ? */        if (pData->iBACKmandatory & 0x01)        {          pData->fRestbkgdrow = (mng_fptr)mng_restore_bkgd_backcolor;          bColorcorr          = MNG_TRUE;        }      }#endif      pData->fCorrectrow = MNG_NULL;   /* default no color-correction */      if (bColorcorr)                  /* do we have to do color-correction ? */      {#ifdef MNG_NO_CMS        iRetcode = MNG_NOERROR;#else#if defined(MNG_FULL_CMS)              /* determine color-management routine */        iRetcode = mng_init_full_cms   (pData, MNG_TRUE, MNG_FALSE, MNG_FALSE);#elif defined(MNG_GAMMA_ONLY)        iRetcode = mng_init_gamma_only (pData, MNG_TRUE, MNG_FALSE, MNG_FALSE);#elif defined(MNG_APP_CMS)        iRetcode = mng_init_app_cms    (pData, MNG_TRUE, MNG_FALSE, MNG_FALSE);#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->iDestt;        /* this is where we start */      iRetcode = MNG_NOERROR;          /* so far, so good */      while ((!iRetcode) && (iY < pData->iDestb))      {                                /* restore a background row */        iRetcode = ((mng_restbkgdrow)pData->fRestbkgdrow) (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)          iRetcode = mng_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_FULL_CMS)              /* cleanup cms stuff */      if (bColorcorr)                  /* did we do color-correction ? */      {        iRetcode = mng_clear_cms (pData);        if (iRetcode)                  /* on error bail out */          return iRetcode;      }#endif#ifndef MNG_SKIPCHUNK_BACK                                       /* background image ? */      if ((pData->bHasBACK) && (pData->iBACKmandatory & 0x02) && (pData->iBACKimageid))      {        mng_imagep pImage;                                       /* let's find that object then */        pData->pRetrieveobj = mng_find_imageobject (pData, pData->iBACKimageid);        pImage              = (mng_imagep)pData->pRetrieveobj;                                       /* exists, viewable and visible ? */        if ((pImage) && (pImage->bViewable) && (pImage->bVisible))        {                              /* will it fall within the target region ? */          if ((pImage->iPosx < pData->iDestr) && (pImage->iPosy < pData->iDestb)             &&              ((pData->iBACKtile) ||               ((pImage->iPosx + (mng_int32)pImage->pImgbuf->iWidth  >= pData->iDestl) &&                (pImage->iPosy + (mng_int32)pImage->pImgbuf->iHeight >= pData->iDestt)    )) &&              ((!pImage->bClipped) ||               ((pImage->iClipl <= pImage->iClipr) && (pImage->iClipt <= pImage->iClipb)     &&                (pImage->iClipl < pData->iDestr)   && (pImage->iClipr >= pData->iDestl)      &&                (pImage->iClipt < pData->iDestb)   && (pImage->iClipb >= pData->iDestt)         )))          {                            /* right; we've got ourselves something to do */            if (pImage->bClipped)      /* clip output region with image's clipping region ? */            {              if (pImage->iClipl > pData->iDestl)                pData->iDestl = pImage->iClipl;              if (pImage->iClipr < pData->iDestr)                pData->iDestr = pImage->iClipr;              if (pImage->iClipt > pData->iDestt)                pData->iDestt = pImage->iClipt;              if (pImage->iClipb < pData->iDestb)                pData->iDestb = pImage->iClipb;            }                                       /* image offset does some extra clipping too ! */            if (pImage->iPosx > pData->iDestl)              pData->iDestl = pImage->iPosx;            if (pImage->iPosy > pData->iDestt)              pData->iDestt = pImage->iPosy;            if (!pData->iBACKtile)     /* without tiling further clipping is needed */            {              if (pImage->iPosx + (mng_int32)pImage->pImgbuf->iWidth  < pData->iDestr)                pData->iDestr = pImage->iPosx + (mng_int32)pImage->pImgbuf->iWidth;              if (pImage->iPosy + (mng_int32)pImage->pImgbuf->iHeight < pData->iDestb)                pData->iDestb = pImage->iPosy + (mng_int32)pImage->pImgbuf->iHeight;            }                        pData->iSourcel    = 0;    /* source relative to destination */            pData->iSourcer    = pData->iDestr - pData->iDestl;            pData->iSourcet    = 0;            pData->iSourceb    = pData->iDestb - pData->iDestt;                                       /* 16-bit background ? */#ifdef MNG_NO_16BIT_SUPPORT            pData->bIsRGBA16   = MNG_FALSE;#else            pData->bIsRGBA16      = (mng_bool)(pImage->pImgbuf->iBitdepth > 8);#endif                                       /* let restore routine know the offsets !!! */            pData->iBackimgoffsx  = pImage->iPosx;            pData->iBackimgoffsy  = pImage->iPosy;            pData->iBackimgwidth  = pImage->pImgbuf->iWidth;            pData->iBackimgheight = pImage->pImgbuf->iHeight;            pData->iRow           = 0; /* start at the top again !! */                                       /* determine background object 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_retrieve_rgba8;                          pData->bIsOpaque      = MNG_FALSE;                          break;                        }              case  8 : {#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_TRUE;

⌨️ 快捷键说明

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