*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国  https://www.bc-cn.net
*/ 作者: flyue    E-mail:ljypct@21cn.com    QQ:406088125
*/ 时间: 2007-8-3  编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------
基于DirectDraw的AlphaBlent半透明混色实现代码:
//获得Direct Surface上的一点像素值
void DDGetPixel(BYTE *bits,int X,int Y,int Pitch,int Depth,BYTE *Pixel)
{
    int pos=Pitch*Y+Depth*X;
    for(int i=0;i<Depth;i++)
        Pixel[i]=bits[pos+i];
}
//设置Direct Surface上的一点像素值
void DDSetPixel(BYTE *bits,int X,int Y,int Pitch,int Depth,BYTE *Pixel)
{
    int pos=Pitch*Y+Depth*X;
    for(int i=0;i<Depth;i++)
        bits[pos+i]=Pixel[i];
}
//Alpha Blent函数
void AlphaBlent(BYTE *Target,int X,int Y,BYTE *Source,int SX,int SY,int Width,int Height,int Pitch,int Depth,BYTE *Col,double Alpha)
{
    int TrnsX;
    int TrnsY;
    BYTE RGB1[5],RGB2[5],RGB3[5];
    for(TrnsY=Y;TrnsY<=Y+Height-1;TrnsY++)
    {
        for(TrnsX=X;TrnsX<=X+Width-1;TrnsX++)
        {
            DDGetPixel(Source,TrnsX+SX-X,TrnsY+SY-Y,Pitch,Depth,RGB2);
            if((RGB2[0]!=Col[0])||(RGB2[1]!=Col[1])||(RGB2[2]!=Col[2]))
            {
                double Alpha2=1-Alpha;
                int Red2=RGB2[2];
                int Green2=RGB2[1];
                int Blue2=RGB2[0];
DDGetPixel(Target,TrnsX+X,TrnsY+Y,Pitch,Depth,RGB1);
                int Red=RGB1[2];
                int Green=RGB1[1];
                int Blue=RGB1[0];            
                double RedF=Red*Alpha+Red2*Alpha2;
                double GreenF=Green*Alpha+Green2*Alpha2;
                double BlueF=Blue*Alpha+Blue2*Alpha2;
                RGB3[0]=(BYTE)BlueF;
                RGB3[1]=(BYTE)GreenF;
                RGB3[2]=(BYTE)RedF;
                DDSetPixel(Target,TrnsX+X,TrnsY+Y,Pitch,Depth,RGB3);
            }
        }
    }
}
说明:要求Direct颜色设置为24,
ddsd为一个DDSURFACEDESC结构,
Pitch可以用lpDDSPic->Lock(&ddsd,...)来获得ddsd->lPitch,
Depth=ddsd.ddpfPixelFormat.dwRGBBitCount/8;



 
											






 
	    

 
	
