33,007
社区成员
发帖
与我相关
我的任务
分享
inline void CVisualWnd::FadeEffect(BYTE *pBits, Color cl, double Fading, int wt, int ht)
{
static int dr[5][2] = {{-1,0}, {0, 1}, {0, -1}, {1, 0}, {0, 0}};
int x=0, y=0;
int bitBytes, bitLine;
bitBytes = 32/8;
bitLine = wt*bitBytes;
int cla = cl.GetA();
int clr = cl.GetR();
int clg = cl.GetG();
int clb = cl.GetB();
double unFading = 1-Fading;
for(y=0; y!=ht; ++y)
{
for(x=0; x!=wt; ++x)
{
int r=0, g=0, b=0, a=0;
int index=0;
for(int i=0;i!=5;++i)
{
int newx=x+dr[i][0], newy=y+dr[i][1];
if(newy<0 || newy>ht-1 || newx<0 || newx>wt-1)
continue;
b += pBits[newy*bitLine + newx*bitBytes];
g += pBits[newy*bitLine + newx*bitBytes + 1];
r += pBits[newy*bitLine + newx*bitBytes + 2];
a += pBits[newy*bitLine + newx*bitBytes + 3];
++index;
}
pBits[y*bitLine + x*bitBytes] = b*Fading/index + clb*unFading ;
pBits[y*bitLine + x*bitBytes + 1]= g*Fading/index + clg*unFading ;
pBits[y*bitLine + x*bitBytes + 2]= r*Fading/index + clr*unFading ;
pBits[y*bitLine + x*bitBytes + 3]= a*Fading/index + cla*unFading ;
}
}
}
调用:FadeEffect((BYTE *)pBits, 0, 0.95, m_pImage->GetWidth(),m_pImage->GetHeight());