graphic2.c
来自「好记星的控件,包括button,list,对文件操作」· C语言 代码 · 共 1,539 行 · 第 1/5 页
C
1,539 行
dotBuf += uLineBytes;
pDstBuffer += dwDstLineBytes;
}
}
else if (byDrawMode == DRMODE_NOTSRC) {
while (uImageH -- > 0) {
pBakSrcBuffer = dotBuf;
pBakDstBuffer = pDstBuffer;
if (dstHeadEx) { //处理目标前部不到一个字节的部分
if (8 - uOffBit >= dstHeadEx) {
if (nLeft) {
*pBakDstBuffer ++
= (*pBakDstBuffer & headMaskLeft)
| (~(*pBakSrcBuffer >> nRight)
& headMaskRight);
}
else {
*pBakDstBuffer ++
= (*pBakDstBuffer & headMaskLeft)
| (~(*pBakSrcBuffer ++) & headMaskRight);
}
}
else { //这部分由源图中两个字节中的内容组成
*pBakDstBuffer = (*pBakDstBuffer & headMaskLeft)
|(~(*pBakSrcBuffer++ << nLeft) &headMaskRight);
*pBakDstBuffer ++ |= (~(*pBakSrcBuffer >> nRight)
& headMaskRight);
}
}
//中间部分,移位拷贝
if (nLeft) {
for (i = 0; i < uLoopCount; ++i) {
*pBakDstBuffer ++ = (~*pBakSrcBuffer ++ << nLeft)
| ((UINT8)~pBakSrcBuffer[1] >> nRight);
}
}
else {
for (i = 0; i < uLoopCount; ++i) {
*pBakDstBuffer ++ = ~*pBakSrcBuffer ++;
}
}
//最后不到一个字节的内容
if (srcTailEx) {
if (nRight >= srcTailEx) {
*pBakDstBuffer = ~(*pBakSrcBuffer << nLeft)
& tailMaskLeft
| (*pBakDstBuffer & tailMaskRight);
}
else {
*pBakDstBuffer = (~*pBakSrcBuffer ++ << nLeft)
& tailMaskLeft
| (*pBakDstBuffer & tailMaskRight);
*pBakDstBuffer
|= ((~*pBakSrcBuffer & 0xff) >> nRight)
& tailMaskLeft;
}
}
dotBuf += uLineBytes;
pDstBuffer += dwDstLineBytes;
}
}
else if (byDrawMode == DRMODE_SRCAND) {
while (uImageH -- > 0) {
pBakSrcBuffer = dotBuf;
pBakDstBuffer = pDstBuffer;
if (dstHeadEx) { //处理目标前部不到一个字节的部分
if (8 - uOffBit >= uImageW) {
if (8 - uOffBit >= dstHeadEx) {
if (nLeft) {
*pBakDstBuffer ++
&= ((*pBakSrcBuffer >> nRight)
& headMaskRight) | headMaskLeft;
}
else {
*pBakDstBuffer ++ &= headMaskLeft
| (*pBakSrcBuffer ++ & headMaskRight);
}
}
else {
*pBakDstBuffer ++ &= ((*pBakSrcBuffer << nLeft)
& headMaskRight) | headMaskLeft;
}
}
else { //这部分由源图中两个字节中的内容组成
*pBakDstBuffer ++ &= ((pBakSrcBuffer[1] >> nRight)
| (*pBakSrcBuffer ++ << nLeft))
& headMaskRight | headMaskLeft;
}
}
//中间部分,移位拷贝
if (nLeft) {
for (i = 0; i < uLoopCount; ++i) {
*pBakDstBuffer ++ &= (*pBakSrcBuffer ++ << nLeft)
| (pBakSrcBuffer[1] >> nRight);
}
}
else {
for (i = 0; i < uLoopCount; ++i) {
*pBakDstBuffer ++ &= *pBakSrcBuffer ++;
}
}
//最后不到一个字节的内容
if (srcTailEx) {
if (nRight >= srcTailEx) {
*pBakDstBuffer &= (*pBakSrcBuffer << nLeft)
& tailMaskLeft | tailMaskRight;
}
else {
*pBakDstBuffer &= ((*pBakSrcBuffer << nLeft)
| (pBakSrcBuffer[1] >> nRight))
& tailMaskLeft | tailMaskRight;
}
}
dotBuf += uLineBytes;
pDstBuffer += dwDstLineBytes;
}
}
break;
#if COLOR_LEVEL >= 4
case 0x04:
pTable = g_mTable.pCurTable;
pDstBuffer += (x >> 3) << 2;
dstHeadEx = (8 - (x & 7)) & 7;
srcTailEx = (uImageW - dstHeadEx) & 7;
uLoopCount = (uImageW - dstHeadEx) >> 3;
nLeft = (uOffBit + dstHeadEx) & 7;
nRight = 8 - nLeft;
headMaskL4 = maskTable4[dstHeadEx];
headMaskR4 = ~headMaskL4;
tailMaskL4 = maskTable4[(8 - srcTailEx) & 7];
tailMaskR4 = ~tailMaskL4;
if (uImageW < dstHeadEx) { //小于4个字节
headMaskL4 |= ~maskTable4[dstHeadEx - uImageW];
headMaskR4 = ~headMaskL4;
dstHeadEx = uImageW;
uLoopCount = 0;
srcTailEx = 0;
}
if (byDrawMode == DRMODE_SRCCOPY) {
while (uImageH -- > 0) {
pBakSrcBuffer = dotBuf;
pTmp = (UINT32 *)pDstBuffer;
if (dstHeadEx) { //处理目标前部不到4个字节的部分
if (8 - (uOffBit & 7) >= dstHeadEx) {
if (nLeft) {
*pTmp ++ = (*pTmp & headMaskL4) | (pTable
[*pBakSrcBuffer >> nRight] & headMaskR4);
}
else {
*pTmp ++ = (*pTmp & headMaskL4) | (pTable
[*pBakSrcBuffer ++] & headMaskR4);
}
}
else { //这部分由源图中两个部分中的内容组成
*pTmp = (*pTmp & headMaskL4)
| (pTable [(*pBakSrcBuffer++ << nLeft) & 0xff]
& headMaskR4);
*pTmp ++ |= pTable[*pBakSrcBuffer >> nRight]
& headMaskR4;
}
}
//中间部分,移位拷贝
if (nLeft) {
for (i = 0; i < uLoopCount; ++i) {
*pTmp ++ = pTable[(*pBakSrcBuffer ++ << nLeft)
& 0xff | (pBakSrcBuffer[1] >> nRight)];
}
}
else {
for (i = 0; i < uLoopCount; ++ i) {
*pTmp ++ = pTable[*pBakSrcBuffer ++];
}
}
//最后不到4个字节的内容
if (srcTailEx) {
if (nRight >= srcTailEx) {
*pTmp = pTable[(*pBakSrcBuffer << nLeft) & 0xff]
& tailMaskL4 | (*pTmp & tailMaskR4);
}
else {
*pTmp = pTable[(*pBakSrcBuffer ++ << nLeft) & 0xff]
& maskTable4[nLeft] | (*pTmp & tailMaskR4);
*pTmp |= pTable[*pBakSrcBuffer >> nRight]
& tailMaskL4 & ~maskTable4[nLeft];
}
}
dotBuf += uLineBytes;
pDstBuffer += dwDstLineBytes;
}
}
else if (byDrawMode == DRMODE_TRANSPARENT
&& g_mTable.dwColor == BLACK_COLOR || byDrawMode == DRMODE_SRCOR) {
while (uImageH -- > 0) {
pBakSrcBuffer = dotBuf;
pTmp = (UINT32 *)pDstBuffer;
if (dstHeadEx) { //处理目标前部不到4个字节的部分
if (8 - (uOffBit & 7) >= dstHeadEx) {
if (nLeft) {
*pTmp ++ |= pTable[*pBakSrcBuffer >> nRight]
& headMaskR4;
}
else {
*pTmp ++
|= pTable[*pBakSrcBuffer ++] & headMaskR4;
}
}
else { //这部分由源图中两个字节中的内容组成
*pTmp ++ |= pTable[(*pBakSrcBuffer ++ << nLeft)
& 0xff | (pBakSrcBuffer[1] >> nRight)]
& headMaskR4;
}
}
//中间部分,移位拷贝
if (nLeft) {
for (i = 0; i < uLoopCount; ++i) {
*pTmp ++ |= pTable[(*pBakSrcBuffer ++ << nLeft)
& 0xff | (*(pBakSrcBuffer + 1) >> nRight)];
}
}
else {
for (i = 0; i < uLoopCount; ++ i) {
*pTmp ++ |= pTable[*pBakSrcBuffer ++];
}
}
//最后不到4个字节的内容
if (srcTailEx) {
if (nRight >= srcTailEx) {
*pTmp |= pTable[(*pBakSrcBuffer << nLeft) & 0xff]
& tailMaskL4;
}
else {
*pTmp |= pTable[(*pBakSrcBuffer++ << nLeft) & 0xff]
& tailMaskL4;
*pTmp |= pTable[*pBakSrcBuffer >> nRight]
& tailMaskL4;
}
}
dotBuf += uLineBytes;
pDstBuffer += dwDstLineBytes;
}
}
else if (byDrawMode == DRMODE_TRANSPARENT) {
UINT8 byData;
while (uImageH -- > 0) {
pBakSrcBuffer = dotBuf;
pTmp = (UINT32 *)pDstBuffer;
if (dstHeadEx) { //处理目标前部不到4个字节的部分
if (8 - (uOffBit & 7) >= dstHeadEx) {
if (nLeft) {
byData = *pBakSrcBuffer >> nRight;
}
else {
byData = *pBakSrcBuffer ++;
}
}
else { //这部分由源图中两个字节中的内容组成
byData = *pBakSrcBuffer++ << nLeft;
byData |= *pBakSrcBuffer >> nRight;
}
*pTmp &= ~Std1To4[byData] & headMaskR4 | headMaskL4;
*pTmp ++ |= pTable[byData] & headMaskR4;
}
//中间部分,移位拷贝
if (nLeft) {
for (i = 0; i < uLoopCount; ++i) {
byData = (*pBakSrcBuffer ++ << nLeft)
| (pBakSrcBuffer[1] >> nRight);
*pTmp &= ~Std1To4[byData];
*pTmp ++ |= pTable[byData];
}
}
else {
for (i = 0; i < uLoopCount; ++ i) {
byData = *pBakSrcBuffer ++;
*pTmp &= ~Std1To4[byData];
*pTmp ++ |= pTable[byData];
}
}
//最后不到4个字节的内容
if (srcTailEx) {
if (nRight >= srcTailEx) {
byData = *pBakSrcBuffer << nLeft;
}
else {
byData = *pBakSrcBuffer ++ << nLeft;
byData |= *pBakSrcBuffer >> nRight;
}
*pTmp &= ~Std1To4[byData] & tailMaskL4 | tailMaskR4;
*pTmp |= pTable[byData] & tailMaskL4;
}
dotBuf += uLineBytes;
pDstBuffer += dwDstLineBytes;
}
}
else if (byDrawMode == DRMODE_SRCAND) {
while (uImageH -- > 0) {
pBakSrcBuffer = dotBuf;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?