MyException - 我的异常网
当前位置:我的异常网» VC/MFC » 影子算法可能会出现小数情况吗?//Alpha/1到底啥作用

影子算法可能会出现小数情况吗?//Alpha/1到底啥作用

www.MyException.Cn  网友分享于:2013-02-20  浏览:5次
阴影算法可能会出现小数情况吗?//Alpha/1到底啥作用

void DrawShadow(CDC *pDC, CRect rect)
{
COLORREF oldcolor = RGB(255, 255, 255);
BYTE newValR, newValG, newValB;
BYTE AlphaArray[] = {140, 170, 212, 240};
BYTE AlphaArray2[] = {170, 205, 220, 240, 240, 250, 255};

// 底部的阴影 -----------------------------------------
int i, j;
for (j = 0; j < 4; j++)
{
for (i = 6; i <= rect.right - 5; i++)
{
oldcolor = pDC->GetPixel(i, rect.bottom - (4 - j));
newValR = GetRValue(oldcolor) * AlphaArray[j] / 255;  
newValG = GetGValue(oldcolor) * AlphaArray[j] / 255;  
newValB = GetBValue(oldcolor) * AlphaArray[j] / 255;  
pDC->SetPixel(i, rect.bottom - (4 - j), RGB(newValR, newValG, newValB));
}
}

// 右边的阴影 -----------------------------------------
for (i = 0; i < 4; i++)
{
for (j = 6; j <= rect.bottom - 5; j++)
{
oldcolor = pDC->GetPixel(rect.right - (4 - i), j);
newValR = GetRValue(oldcolor) * AlphaArray[i] / 255;  
newValG = GetGValue(oldcolor) * AlphaArray[i] / 255;  
newValB = GetBValue(oldcolor) * AlphaArray[i] / 255;  
pDC->SetPixel(rect.right - (4 - i), j, RGB(newValR, newValG, newValB));
}
}

// 其他部位的阴影 --------------------------------------
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
if ((i + j) > 6) break;
BYTE alpha = AlphaArray2[i + j];
oldcolor = pDC->GetPixel(rect.right - 4 + i, rect.bottom - 4 + j);
newValR = GetRValue(oldcolor) * alpha / 1;  
newValG = GetGValue(oldcolor) * alpha / 1;  
newValB = GetBValue(oldcolor) * alpha / 1;  
pDC->SetPixel(rect.right - 4 + i, rect.bottom - 4 + j, RGB(newValR, newValG, newValB));

oldcolor = pDC->GetPixel(rect.right - 4 + i, rect.top + 5 - j);
newValR = GetRValue(oldcolor) * alpha / 1;  
newValG = GetGValue(oldcolor) * alpha / 1;  
newValB = GetBValue(oldcolor) * alpha / 1;  
pDC->SetPixel(rect.right - 4 + i, rect.top + 5 - j, RGB(newValR, newValG, newValB));

oldcolor = pDC->GetPixel(rect.left - i + 5, rect.bottom - 4 + j);
newValR = GetRValue(oldcolor) * alpha / 1;  
newValG = GetGValue(oldcolor) * alpha / 1;  
newValB = GetBValue(oldcolor) * alpha / 1;  
pDC->SetPixel(rect.left - i + 5, rect.bottom - 4 + j, RGB(newValR, newValG, newValB));

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有