📄 decolor.c
字号:
#include "decolor.h"
#ifndef OUTPUT_ORDER_BGR
#define ColorChange(addrS,addrT) {\
Y = pYBuf[addrS] ;\
pCbCoe = COE_Cb + (pCbBuf[addrS] << 1);\
pCrCoe = COE_Cr + (pCrBuf[addrS] << 1);\
pRGB[addrT+0] = ColorLimitTable[Y + pCrCoe[0]] ;\
pRGB[addrT+2] = ColorLimitTable[Y + pCbCoe[0]] ;\
pRGB[addrT+1] = ColorLimitTable[Y + pCbCoe[1] + pCrCoe[1]] ;\
}
#else
#define ColorChange(addrS,addrT) {\
Y = pYBuf[addrS] ;\
pCbCoe = COE_Cb + (pCbBuf[addrS] << 1);\
pCrCoe = COE_Cr + (pCrBuf[addrS] << 1);\
pRGB[addrT+0] = ColorLimitTable[Y + pCbCoe[0]] ;\
pRGB[addrT+2] = ColorLimitTable[Y + pCrCoe[0]] ;\
pRGB[addrT+1] = ColorLimitTable[Y + pCbCoe[1] + pCrCoe[1]] ;\
}
#endif
MVoid JPG_YCMK_DeColor( int size, LPDECOLOR_PARAM pDecolorParam, int offset) {
register MByte *pYBuf = pDecolorParam -> pY ;
register MByte *pCBuf = pDecolorParam -> pCb ;
register MByte *pMBuf = pDecolorParam -> pCr ;
register MByte *pRGB = pDecolorParam -> outRGB + offset ;
#ifdef __WIN32__
register int nWidth = pDecolorParam -> OutWidth ;
register int nBackBytes = pDecolorParam -> BackBytes ;
register int i, j ;
i = pDecolorParam->OutLineCount;
while (--i >= 0) {
j = nWidth;
while(--j >= 0) {
*pRGB++ = *pYBuf++;
*pRGB++ = *pCBuf++;
*pRGB++ = *pMBuf++;
}
pRGB -= nBackBytes;
}
#else
while ( --size >= 0 ) {
pRGB[0] = *pYBuf ++ ;
pRGB[1] = *pCBuf ++ ;
pRGB[2] = *pMBuf ++ ;
pRGB += 3 ;
}
#endif
}
MVoid JPG_TrueColor_DeColor( register MByte *ColorLimitTable, int size, LPDECOLOR_PARAM pDecolorParam, int offset) {
register MByte *pYBuf = pDecolorParam -> pY ;
register MByte *pCbBuf = pDecolorParam -> pCb ;
register MByte *pCrBuf = pDecolorParam -> pCr ;
register MByte *pRGB = pDecolorParam -> outRGB + offset ;
register int *COE_Cr = pDecolorParam -> COE_Cr ;
register int *COE_Cb = pDecolorParam -> COE_Cb ;
register int Y ;
register int *pCbCoe ;
register int *pCrCoe ;
#ifdef __WIN32__
int nWidth = pDecolorParam -> OutWidth ;
int rem = nWidth & 3 ;
int nBackBytes = pDecolorParam -> BackBytes-rem*3 ;
int i, j ;
nWidth >>= 2 ;
i = pDecolorParam->OutLineCount;
while (--i >= 0) {
j = nWidth;
while(--j >= 0) {
ColorChange(0, 0);
ColorChange(1, 3);
ColorChange(2, 6);
ColorChange(3, 9);
pRGB += 12 ;
pYBuf += 4 ;
pCbBuf += 4 ;
pCrBuf += 4 ;
}
if ( rem == 1 ) {
ColorChange(0, 0);
}
else if ( rem == 2 ) {
ColorChange(0, 0);
ColorChange(1, 3);
}
else if ( rem == 3 ) {
ColorChange(0, 0);
ColorChange(1, 3);
ColorChange(2, 6);
}
pYBuf += rem ;
pCbBuf += rem ;
pCrBuf += rem ;
pRGB -= nBackBytes;
}
#else
int rem = size & 3 ;
size >>= 2 ;
while ( --size >= 0 ) {
ColorChange(0,0);
ColorChange(1,3);
ColorChange(2,6);
ColorChange(3,9);
pRGB += 12 ;
pYBuf += 4 ;
pCrBuf += 4 ;
pCbBuf += 4 ;
}
if ( rem == 1 ) {
ColorChange(0,0);
}
else if ( rem == 2 ) {
ColorChange(0,0);
ColorChange(1,3);
}
else if ( rem == 3 ) {
ColorChange(0,0);
ColorChange(1,3);
ColorChange(2,6);
}
#endif
}
MVoid JPG_GrayScale_DeColor(int size, LPDECOLOR_PARAM pDecolorParam, int offset)
{
register MByte *pYBuf = pDecolorParam -> pY ;
register MByte *pRGB = pDecolorParam -> outRGB + offset ;
#ifdef __WIN32__
register int nWidth = pDecolorParam -> OutWidth ;
register int nBackBytes = pDecolorParam -> BackBytes ;
register int i, j ;
i = pDecolorParam->OutLineCount;
while (--i >= 0) {
j = nWidth;
while(--j >= 0) {
*pRGB++ = *pYBuf;
*pRGB++ = *pYBuf;
*pRGB++ = *pYBuf++;
}
pRGB -= nBackBytes;
}
#else
while ( --size >= 0 ) {
pRGB[0] = *pYBuf ;
pRGB[1] = *pYBuf ;
pRGB[2] = *pYBuf ++ ;
pRGB += 3 ;
}
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -