|

楼主 |
发表于 2004-5-22 04:17:00
|
显示全部楼层
求助
刚刚发的不全
void Primarycolorout( void )
{
DDSURFACEDESC Desc;
int dleft,dhigh,colorouttime;
WORD *pDesc,R,G,B;
for(colorouttime=0;colorouttime<64;colorouttime++)//因为是使用的16位色,565模式,颜色最深也不过2的6次方,所以只扫行64次颜色递减
{
rect.top=0;
rect.left=0;
rect.bottom=480;
rect.right=640;
lpDDSBack->Blt(&rect,lpDDSPrimary,NULL,DDBLT_WAIT,NULL); //这段用来保存当然主界面到背景缓冲区
lpDDSBack->Lock(0,&Desc,0,0);
pDesc=(WORD*)Desc.lpSurface;
for(dhigh=0;dhigh<480;dhigh++)//使用的是640,480模式
{
for(dleft=0;dleft<640;dleft++)
{
R=*pDesc&0xf800;
G=*pDesc&0x0fe0;
B=*pDesc&0x001f;
if(R>0)
R=R-0x0800;
if(G>0)
G=G-0x0020;
if(B>0)
B=B-0x0001;
*pDesc=R|G;
*pDesc=*pDesc|B;
pDesc++;
}
pDesc-=Desc.lPitch/2;
}
lpDDSBack->Unlock(0);
lpDDSPrimary->Flip(NULL,NULL);
}
} |
|