📄 libmng_pixels.c
字号:
/* 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 + -