📄 libmng_filter.c
字号:
for (iX = 0; iX < pData->iRowsamples; iX++) { if (!iC) { iC = 2; iB = *pRawi++; iN = 0; iS = 8; } iS -= 4; iQ = (mng_uint8)(((iB >> iS) + pData->iLevel0) & 0x0F); iN = (mng_uint8)((iN << 4) + iQ); iC--; if (!iC) *pRawo++ = iN; } if (iC) *pRawo = (mng_uint8)(iN << iS);#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_G4, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode differ_g8 (mng_datap pData){ mng_uint8p pRawi, pRawo; mng_int32 iX;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_G8, MNG_LC_START)#endif pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; for (iX = 0; iX < pData->iRowsamples; iX++) { *pRawo++ = (mng_uint8)(((mng_uint16)*pRawi + pData->iLevel0) & 0xFF); pRawi++; }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_G8, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode differ_g16 (mng_datap pData){ mng_uint16p pRawi, pRawo; mng_int32 iX;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_G16, MNG_LC_START)#endif pRawi = (mng_uint16p)(pData->pWorkrow + pData->iPixelofs); pRawo = (mng_uint16p)(pData->pPrevrow + pData->iPixelofs); for (iX = 0; iX < pData->iRowsamples; iX++) { *pRawo++ = (mng_uint16)(((mng_uint32)*pRawi + (mng_uint32)pData->iLevel0) & 0xFFFF); pRawi++; }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_G16, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode differ_rgb8 (mng_datap pData){ mng_uint8p pRawi, pRawo; mng_int32 iX;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_RGB8, MNG_LC_START)#endif pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; for (iX = 0; iX < pData->iRowsamples; iX++) { *(pRawo+1) = (mng_uint8)(((mng_uint16)*(pRawi+1) + pData->iLevel1) & 0xFF); *pRawo = (mng_uint8)(((mng_uint16)*pRawi + pData->iLevel0 + (mng_uint16)*(pRawo+1)) & 0xFF); *(pRawo+2) = (mng_uint8)(((mng_uint16)*(pRawi+2) + pData->iLevel2 + (mng_uint16)*(pRawo+1)) & 0xFF); pRawi += 3; pRawo += 3; }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_RGB8, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode differ_rgb16 (mng_datap pData){ mng_uint16p pRawi, pRawo; mng_int32 iX;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_RGB16, MNG_LC_START)#endif pRawi = (mng_uint16p)(pData->pWorkrow + pData->iPixelofs); pRawo = (mng_uint16p)(pData->pPrevrow + pData->iPixelofs); for (iX = 0; iX < pData->iRowsamples; iX++) { *(pRawo+1) = (mng_uint16)(((mng_uint32)*(pRawi+1) + (mng_uint32)pData->iLevel1) & 0xFFFF); *pRawo = (mng_uint16)(((mng_uint32)*pRawi + (mng_uint32)pData->iLevel0 + (mng_uint32)*(pRawo+1)) & 0xFFFF); *(pRawo+2) = (mng_uint16)(((mng_uint32)*(pRawi+2) + (mng_uint32)pData->iLevel2 + (mng_uint32)*(pRawo+1)) & 0xFFFF); pRawi += 3; pRawo += 3; }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_RGB16, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode differ_idx1 (mng_datap pData){ mng_uint8p pRawi, pRawo; mng_int32 iX;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_IDX1, MNG_LC_START)#endif if (pData->iLevel0 & 0x01) /* is it uneven level ? */ { pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; /* just invert every bit */ for (iX = 0; iX < pData->iRowsize; iX++) *pRawo++ = (mng_uint8)(~(*pRawi++)); }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_IDX1, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode differ_idx2 (mng_datap pData){ mng_uint8p pRawi, pRawo; mng_int32 iX; mng_int32 iC, iS; mng_uint8 iB, iN, iQ;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_IDX2, MNG_LC_START)#endif pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; iC = 0; iB = 0; iN = 0; iS = 0; for (iX = 0; iX < pData->iRowsamples; iX++) { if (!iC) { iC = 4; iB = *pRawi++; iN = 0; iS = 8; } iS -= 2; iQ = (mng_uint8)(((iB >> iS) + pData->iLevel0) & 0x03); iN = (mng_uint8)((iN << 2) + iQ); iC--; if (!iC) *pRawo++ = iN; } if (iC) *pRawo = (mng_uint8)(iN << iS);#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_IDX2, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode differ_idx4 (mng_datap pData){ mng_uint8p pRawi, pRawo; mng_int32 iX; mng_int32 iC, iS; mng_uint8 iB, iN, iQ;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_IDX4, MNG_LC_START)#endif pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; iC = 0; iB = 0; iN = 0; iS = 0; for (iX = 0; iX < pData->iRowsamples; iX++) { if (!iC) { iC = 2; iB = *pRawi++; iN = 0; iS = 8; } iS -= 4; iQ = (mng_uint8)(((iB >> iS) + pData->iLevel0) & 0x0F); iN = (mng_uint8)((iN << 4) + iQ); iC--; if (!iC) *pRawo++ = iN; } if (iC) *pRawo = (mng_uint8)(iN << iS);#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_IDX4, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode differ_idx8 (mng_datap pData){ mng_uint8p pRawi, pRawo; mng_int32 iX;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_IDX8, MNG_LC_START)#endif pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; for (iX = 0; iX < pData->iRowsamples; iX++) { *pRawo++ = (mng_uint8)(((mng_uint16)*pRawi + pData->iLevel0) & 0xFF); pRawi++; }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_IDX8, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode differ_ga8 (mng_datap pData){ mng_uint8p pRawi, pRawo; mng_int32 iX;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_GA8, MNG_LC_START)#endif pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; for (iX = 0; iX < pData->iRowsamples; iX++) { *pRawo = (mng_uint8)(((mng_uint16)*pRawi + pData->iLevel0) & 0xFF); *(pRawo+1) = (mng_uint8)(((mng_uint16)*(pRawi+1) + pData->iLevel1) & 0xFF); pRawi += 2; pRawo += 2; }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_GA8, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode differ_ga16 (mng_datap pData){ mng_uint16p pRawi, pRawo; mng_int32 iX;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_GA16, MNG_LC_START)#endif pRawi = (mng_uint16p)(pData->pWorkrow + pData->iPixelofs); pRawo = (mng_uint16p)(pData->pPrevrow + pData->iPixelofs); for (iX = 0; iX < pData->iRowsamples; iX++) { *pRawo = (mng_uint16)(((mng_uint32)*pRawi + (mng_uint32)pData->iLevel0) & 0xFFFF); *(pRawo+1) = (mng_uint16)(((mng_uint32)*(pRawi+1) + (mng_uint32)pData->iLevel1) & 0xFFFF); pRawi += 2; }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_GA16, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode differ_rgba8 (mng_datap pData){ mng_uint8p pRawi, pRawo; mng_int32 iX;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_RGBA8, MNG_LC_START)#endif pRawi = pData->pWorkrow + pData->iPixelofs; pRawo = pData->pPrevrow + pData->iPixelofs; for (iX = 0; iX < pData->iRowsamples; iX++) { *(pRawo+1) = (mng_uint8)(((mng_uint16)*(pRawi+1) + pData->iLevel1) & 0xFF); *pRawo = (mng_uint8)(((mng_uint16)*pRawi + pData->iLevel0 + (mng_uint16)*(pRawo+1)) & 0xFF); *(pRawo+2) = (mng_uint8)(((mng_uint16)*(pRawi+2) + pData->iLevel2 + (mng_uint16)*(pRawo+1)) & 0xFF); *(pRawo+3) = (mng_uint8)(((mng_uint16)*(pRawi+3) + pData->iLevel3) & 0xFF); pRawi += 4; pRawo += 4; }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_RGBA8, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */mng_retcode differ_rgba16 (mng_datap pData){ mng_uint16p pRawi, pRawo; mng_int32 iX;#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_RGBA16, MNG_LC_START)#endif pRawi = (mng_uint16p)(pData->pWorkrow + pData->iPixelofs); pRawo = (mng_uint16p)(pData->pPrevrow + pData->iPixelofs); for (iX = 0; iX < pData->iRowsamples; iX++) { *(pRawo+1) = (mng_uint16)(((mng_uint32)*(pRawi+1) + (mng_uint32)pData->iLevel1) & 0xFFFF); *pRawo = (mng_uint16)(((mng_uint32)*pRawi + (mng_uint32)pData->iLevel0 + (mng_uint32)*(pRawo+1)) & 0xFFFF); *(pRawo+2) = (mng_uint16)(((mng_uint32)*(pRawi+2) + (mng_uint32)pData->iLevel2 + (mng_uint32)*(pRawo+1)) & 0xFFFF); *(pRawo+3) = (mng_uint16)(((mng_uint32)*(pRawi+3) + (mng_uint32)pData->iLevel3) & 0xFFFF); pRawi += 4; pRawo += 4; }#ifdef MNG_SUPPORT_TRACE MNG_TRACE (pData, MNG_FN_DIFFER_RGBA16, MNG_LC_END)#endif return MNG_NOERROR;}/* ************************************************************************** */#endif /* MNG_INCLUDE_FILTERS *//* ************************************************************************** *//* * end of file * *//* ************************************************************************** */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -