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

📄 libmng_pixels.c

📁 奇趣公司比较新的qt/emd版本
💻 C
📖 第 1 页 / 共 5 页
字号:
                            (mng_uint32)(AB) / (mng_uint32)(AC));                \       (RC) = (mng_uint16)((S * (mng_uint32)(RT) +                               \                            T * (mng_uint32)(RB) + (mng_uint32)32767) >> 16);    \       (GC) = (mng_uint16)((S * (mng_uint32)(GT) +                               \                            T * (mng_uint32)(GB) + (mng_uint32)32767) >> 16);    \       (BC) = (mng_uint16)((S * (mng_uint32)(BT) +                               \                            T * (mng_uint32)(BB) + (mng_uint32)32767) >> 16); }/* ************************************************************************** *//* note a good optimizing compiler will optimize this */#define DIV255B8(x) (mng_uint8)(((x) + 127) / 255)#define DIV255B16(x) (mng_uint16)(((x) + 32767) / 65535)/* ************************************************************************** *//* *                                                                        * *//* * Progressive display check - checks to see if progressive display is    * *//* * in order & indicates so                                                * *//* *                                                                        * *//* * The routine is called after a call to one of the display_xxx routines  * *//* * if appropriate                                                         * *//* *                                                                        * *//* * The refresh is warrented in the read_chunk routine (mng_read.c)        * *//* * and only during read&display processing, since there's not much point  * *//* * doing it from memory!                                                  * *//* *                                                                        * *//* ************************************************************************** */mng_retcode mng_display_progressive_check (mng_datap pData){  if ((pData->bDoProgressive) &&       /* need progressive display? */      ((pData->eImagetype != mng_it_mng) || (pData->iDataheight > 300)) &&      (pData->iDestb - pData->iDestt > 50) && (!pData->pCurraniobj))  {    mng_int32 iC = pData->iRow + pData->iDestt - pData->iSourcet;    if (iC % 20 == 0)                  /* every 20th line */      pData->bNeedrefresh = MNG_TRUE;  }  return MNG_NOERROR;}/* ************************************************************************** *//* *                                                                        * *//* * Display routines - convert rowdata (which is already color-corrected)  * *//* * to the output canvas, respecting the opacity information               * *//* *                                                                        * *//* ************************************************************************** */MNG_LOCAL void check_update_region (mng_datap pData){                                      /* determine actual canvas row */  mng_int32 iRow = pData->iRow + pData->iDestt - pData->iSourcet;                                       /* check for change in update-region */  if ((pData->iDestl < (mng_int32)pData->iUpdateleft) || (pData->iUpdateright == 0))    pData->iUpdateleft   = pData->iDestl;  if (pData->iDestr > (mng_int32)pData->iUpdateright)    pData->iUpdateright  = pData->iDestr;  if ((iRow < (mng_int32)pData->iUpdatetop) || (pData->iUpdatebottom == 0))    pData->iUpdatetop    = iRow;  if (iRow+1 > (mng_int32)pData->iUpdatebottom)    pData->iUpdatebottom = iRow+1;  return;}/* ************************************************************************** */#ifndef MNG_SKIPCANVAS_RGB8mng_retcode mng_display_rgb8 (mng_datap pData){  mng_uint8p pScanline;  mng_uint8p pDataline;  mng_int32  iX;#ifndef MNG_NO_16BIT_SUPPORT  mng_uint16 iA16;#ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE  mng_uint16 iFGr16, iFGg16, iFGb16;  mng_uint16 iBGr16, iBGg16, iBGb16;#else  mng_uint16 iFGg16;  mng_uint16 iBGg16;#endif#endif  mng_uint8  iA8;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_DISPLAY_RGB8, MNG_LC_START);#endif                                       /* viewable row ? */  if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb))  {                                    /* address destination row */    pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData),                                                   pData->iRow + pData->iDestt -                                                   pData->iSourcet);                                       /* adjust destination row starting-point */    pScanline = pScanline + (pData->iCol * 3) + (pData->iDestl * 3);    pDataline = pData->pRGBArow;       /* address source row */#ifndef MNG_NO_16BIT_SUPPORT    if (pData->bIsRGBA16)              /* adjust source row starting-point */      pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3);    else#endif      pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2);    if (pData->bIsOpaque)              /* forget about transparency ? */    {#ifndef MNG_NO_16BIT_SUPPORT      if (pData->bIsRGBA16)            /* 16-bit input row ? */      {        for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc)        {                              /* scale down by dropping the LSB */          *pScanline     = *pDataline;          *(pScanline+1) = *(pDataline+2);          *(pScanline+2) = *(pDataline+4);          pScanline += (pData->iColinc * 3);          pDataline += 8;        }      }      else#endif      {        for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc)        {                              /* copy the values */          *pScanline     = *pDataline;          *(pScanline+1) = *(pDataline+1);          *(pScanline+2) = *(pDataline+2);          pScanline += (pData->iColinc * 3);          pDataline += 4;        }      }    }    else    {#ifndef MNG_NO_16BIT_SUPPORT      if (pData->bIsRGBA16)            /* 16-bit input row ? */      {        for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc)        {          iA16 = mng_get_uint16 (pDataline+6);          if (iA16)                    /* any opacity at all ? */          {            if (iA16 == 0xFFFF)        /* fully opaque ? */            {                          /* scale down by dropping the LSB */              *pScanline     = *pDataline;              *(pScanline+1) = *(pDataline+2);              *(pScanline+2) = *(pDataline+4);            }            else            {                          /* get the proper values */#ifdef MNG_OPTIMIZE_FOOTPRINT_COMPOSE            int i;            for (i=2; i >= 0; i--)            {              iFGg16 = mng_get_uint16 (pDataline+i+i);                                       /* scale background up */              iBGg16 = (mng_uint16)(*(pScanline+i));              iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16;                                       /* now compose */              MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16);                                       /* and return the composed values */              *(pScanline+i) = (mng_uint8)(iFGg16 >> 8);            }#else              iFGr16 = mng_get_uint16 (pDataline  );              iFGg16 = mng_get_uint16 (pDataline+2);              iFGb16 = mng_get_uint16 (pDataline+4);                                       /* scale background up */              iBGr16 = (mng_uint16)(*pScanline    );              iBGg16 = (mng_uint16)(*(pScanline+1));              iBGb16 = (mng_uint16)(*(pScanline+2));              iBGr16 = (mng_uint16)((mng_uint32)iBGr16 << 8) | iBGr16;              iBGg16 = (mng_uint16)((mng_uint32)iBGg16 << 8) | iBGg16;              iBGb16 = (mng_uint16)((mng_uint32)iBGb16 << 8) | iBGb16;                                       /* now compose */              MNG_COMPOSE16(iFGr16, iFGr16, iA16, iBGr16);              MNG_COMPOSE16(iFGg16, iFGg16, iA16, iBGg16);              MNG_COMPOSE16(iFGb16, iFGb16, iA16, iBGb16);                                       /* and return the composed values */              *pScanline     = (mng_uint8)(iFGr16 >> 8);              *(pScanline+1) = (mng_uint8)(iFGg16 >> 8);              *(pScanline+2) = (mng_uint8)(iFGb16 >> 8);#endif            }          }          pScanline += (pData->iColinc * 3);          pDataline += 8;        }      }      else#endif      {        for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc)        {          iA8 = *(pDataline+3);        /* get alpha value */          if (iA8)                     /* any opacity at all ? */          {            if (iA8 == 0xFF)           /* fully opaque ? */            {                          /* then simply copy the values */              *pScanline     = *pDataline;              *(pScanline+1) = *(pDataline+1);              *(pScanline+2) = *(pDataline+2);            }            else            {                          /* do alpha composing */#ifdef MNG_OPTIMIZE_FOOTPRINT_COMPOSE              int i;              for (i=2; i >= 0; i--)              {              MNG_COMPOSE8 (*(pScanline+i), *(pDataline+i), iA8, *(pScanline+i));              }#else              MNG_COMPOSE8 (*pScanline,     *pDataline,     iA8, *pScanline    );              MNG_COMPOSE8 (*(pScanline+1), *(pDataline+1), iA8, *(pScanline+1));              MNG_COMPOSE8 (*(pScanline+2), *(pDataline+2), iA8, *(pScanline+2));#endif            }          }          pScanline += (pData->iColinc * 3);          pDataline += 4;        }      }    }  }  check_update_region (pData);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_DISPLAY_RGB8, MNG_LC_END);#endif  return MNG_NOERROR;}#endif /* MNG_SKIPCANVAS_RGB8 *//* ************************************************************************** */#ifndef MNG_SKIPCANVAS_RGBA8mng_retcode mng_display_rgba8 (mng_datap pData){  mng_uint8p pScanline;  mng_uint8p pDataline;  mng_int32  iX;  mng_uint8  iFGa8, iBGa8, iCa8;#ifndef MNG_NO_16BIT_SUPPORT  mng_uint16 iFGa16, iBGa16, iCa16;#ifndef MNG_OPTIMIZE_FOOTPRINT_COMPOSE  mng_uint16 iFGr16, iFGg16, iFGb16;#else  mng_uint16 iFGg16;#endif  mng_uint16 iBGr16, iBGg16, iBGb16;  mng_uint16 iCr16, iCg16, iCb16;#endif  mng_uint8  iCr8, iCg8, iCb8;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_DISPLAY_RGBA8, MNG_LC_START);#endif                                       /* viewable row ? */  if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb))  {                                    /* address destination row */    pScanline = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData),                                                   pData->iRow + pData->iDestt -                                                   pData->iSourcet);                                       /* adjust destination row starting-point */    pScanline = pScanline + (pData->iCol << 2) + (pData->iDestl << 2);    pDataline = pData->pRGBArow;       /* address source row */#ifndef MNG_NO_16BIT_SUPPORT    if (pData->bIsRGBA16)              /* adjust source row starting-point */      pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 3);    else#endif      pDataline = pDataline + ((pData->iSourcel / pData->iColinc) << 2);    if (pData->bIsOpaque)              /* forget about transparency ? */    {#ifndef MNG_NO_16BIT_SUPPORT      if (pData->bIsRGBA16)            /* 16-bit input row ? */      {

⌨️ 快捷键说明

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