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

📄 libmng_pixels.c

📁 奇趣公司比较新的qt/emd版本
💻 C
📖 第 1 页 / 共 5 页
字号:
                                       /* and return the composed values */                *pScanline     = iCa8;                *(pScanline+1) = iCr8;                *(pScanline+2) = iCg8;                *(pScanline+3) = iCb8;              }            }          }          pScanline += (pData->iColinc << 2);          pDataline += 4;        }      }    }  }  check_update_region (pData);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_DISPLAY_ARGB8, MNG_LC_END);#endif  return MNG_NOERROR;}#endif /* MNG_SKIPCANVAS_ARGB8 *//* ************************************************************************** */#ifndef MNG_SKIPCANVAS_ARGB8_PMmng_retcode mng_display_argb8_pm (mng_datap pData){  mng_uint8p pScanline;  mng_uint8p pDataline;  mng_int32  iX;  mng_uint32 s, t;#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_DISPLAY_ARGB8_PM, 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 ? */      {        for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc)        {                              /* scale down by dropping the LSB */		  if ((s = pDataline[6]) == 0)			*(mng_uint32*) pScanline = 0; /* set all components = 0 */		  else		  {			if (s == 255)			{              pScanline[0] = 255;              pScanline[1] = pDataline[0];              pScanline[2] = pDataline[2];		      pScanline[3] = pDataline[4];			}			else			{              pScanline[0] = (mng_uint8)s;#ifdef MNG_OPTIMIZE_FOOTPRINT_DIV              {                int i;                for (i=2; i >= 0; i--)                {                  pScanline[3-i] = DIV255B8(s * pDataline[4-i-i]);                }              }  #else              pScanline[1] = DIV255B8(s * pDataline[0]);              pScanline[2] = DIV255B8(s * pDataline[2]);              pScanline[3] = DIV255B8(s * pDataline[4]);#endif           			}		  }          pScanline += (pData->iColinc << 2);          pDataline += 8;        }      }      else#endif      {        for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc)        {                              /* copy the values and premultiply */		  if ((s = pDataline[3]) == 0)			*(mng_uint32*) pScanline = 0; /* set all components = 0 */		  else		  {			if (s == 255)			{              pScanline[0] = 255;              pScanline[1] = pDataline[0];              pScanline[2] = pDataline[1];		      pScanline[3] = pDataline[2];			}			else			{              pScanline[0] = (mng_uint8)s;#ifdef MNG_OPTIMIZE_FOOTPRINT_DIV              {                int i;                for (i=2; i >= 0; i--)                {                  pScanline[3-i] = DIV255B8(s * pDataline[2-i]);                }              }#else              pScanline[1] = DIV255B8(s * pDataline[0]);              pScanline[2] = DIV255B8(s * pDataline[1]);		      pScanline[3] = DIV255B8(s * pDataline[2]);#endif			}		  }          pScanline += (pData->iColinc << 2);          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)        {                              /* get alpha values */          if ((s = pDataline[6]) != 0)       /* any opacity at all ? */          {                            /* fully opaque or background fully transparent ? */            if (s == 255)            {                          /* plain copy it */              pScanline[0] = 255;              pScanline[1] = pDataline[0];              pScanline[2] = pDataline[2];              pScanline[3] = pDataline[4];            }            else            {                          /* now blend (premultiplied) */			  t = 255 - s;              pScanline[0] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[0])));#ifdef MNG_OPTIMIZE_FOOTPRINT_DIV              {                int i;                for (i=2; i >= 0; i--)                {                  pScanline[3-i] = DIV255B8(s * pDataline[4-i-i] + t *                     pScanline[3-i]);                }              }#else              pScanline[1] = DIV255B8(s * pDataline[0] + t * pScanline[1]);              pScanline[2] = DIV255B8(s * pDataline[2] + t * pScanline[2]);			  pScanline[3] = DIV255B8(s * pDataline[4] + t * pScanline[3]);#endif            }          }          pScanline += (pData->iColinc << 2);          pDataline += 8;        }      }      else#endif      {        for (iX = pData->iSourcel + pData->iCol; iX < pData->iSourcer; iX += pData->iColinc)        {          if ((s = pDataline[3]) != 0)       /* any opacity at all ? */          {                            /* fully opaque ? */            if (s == 255)            {                          /* then simply copy the values */              pScanline[0] = 255;              pScanline[1] = pDataline[0];              pScanline[2] = pDataline[1];              pScanline[3] = pDataline[2];            }            else            {                          /* now blend (premultiplied) */			  t = 255 - s;              pScanline[0] = (mng_uint8)(255 - DIV255B8(t * (255 - pScanline[0])));#ifdef MNG_OPTIMIZE_FOOTPRINT_DIV              {                int i;                for (i=2; i >= 0; i--)                {                  pScanline[3-i] = DIV255B8(s * pDataline[2-i] + t *                     pScanline[3-i]);                }              }#else              pScanline[1] = DIV255B8(s * pDataline[0] + t * pScanline[1]);              pScanline[2] = DIV255B8(s * pDataline[1] + t * pScanline[2]);			  pScanline[3] = DIV255B8(s * pDataline[2] + t * pScanline[3]);#endif            }          }          pScanline += (pData->iColinc << 2);          pDataline += 4;        }      }    }  }  check_update_region (pData);#ifdef MNG_SUPPORT_TRACE  MNG_TRACE (pData, MNG_FN_DISPLAY_ARGB8_PM, MNG_LC_END);#endif  return MNG_NOERROR;}#endif /* MNG_SKIPCANVAS_ARGB8_PM *//* ************************************************************************** */#ifndef MNG_SKIPCANVAS_RGB8_A8mng_retcode mng_display_rgb8_a8 (mng_datap pData){  mng_uint8p pScanline;  mng_uint8p pAlphaline;  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_RGB8_A8, MNG_LC_START);#endif                                       /* viewable row ? */  if ((pData->iRow >= pData->iSourcet) && (pData->iRow < pData->iSourceb))  {                                    /* address destination rows */    pScanline  = (mng_uint8p)pData->fGetcanvasline (((mng_handle)pData),                                                    pData->iRow + pData->iDestt -                                                    pData->iSourcet);    pAlphaline = (mng_uint8p)pData->fGetalphaline  (((mng_handle)pData),                                                    pData->iRow + pData->iDestt -                                                    pData->iSourcet);                                       /* adjust destination rows starting-point */    pScanline  = pScanline  + (pData->iCol * 3) + (pData->iDestl * 3);    pAlphaline = pAlphaline + pData->iCol + pData->iDestl;    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);          *pAlphaline    = *(pDataline+6);          pScanline  += (pData->iColinc * 3);          pAlphaline += pData->iColinc;          pDa

⌨️ 快捷键说明

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