|

楼主 |
发表于 2004-6-10 17:36:00
|
显示全部楼层
Re:两个图片Alpha混合问题
就是这段代码了,还是有问题,创建离屏页面lpDDSBack时是这样的:DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY
,lpDDSBuffer是后台缓冲
到底什么错误,那位大侠指点一下,多谢了!
//start
DDSURFACEDESC2 ddsdDest,ddsdSour;
ZeroMemory(&ddsdDest,sizeof(ddsdDest));
ZeroMemory(&ddsdSour,sizeof(ddsdSour));
ddsdDest.dwSize=sizeof(ddsdDest);
ddsdSour.dwSize=sizeof(ddsdSour);
DDReLoadBitmap(lpDDSBack,"1.BMP");
DDReLoadBitmap(lpDDSBuffer,"2.BMP");
ddrval = lpDDSBack->Lock(NULL, &ddsdSour, DDLOCK_WAIT, NULL );
if( ddrval == DDERR_SURFACELOST )
{
ddrval = lpDD->RestoreAllSurfaces();
if( ddrval != DD_OK ) return( false );
}
ddrval = lpDDSBuffer->Lock(NULL, &ddsdDest, DDLOCK_WAIT, NULL );
if( ddrval == DDERR_SURFACELOST )
{
ddrval = lpDD->RestoreAllSurfaces();
if( ddrval != DD_OK ) return( false );
}
WORD * DSF = (WORD *)ddsdSour.lpSurface;
WORD * DDF = (WORD *)ddsdDest.lpSurface;
static int alpha=0;
static int k=1;
int index=0;
for(int y=0;y<480;y++)
{
for(int x=0;x<640;x++)
{
DDF[index]=_Alpha_Pixel(DSF[index],DDF[index],alpha);
index++;
}
}
alpha+=k;
if(alpha>31)
{
k=-k;
alpha=31;
}
if(alpha<0)
{
k=-k;
alpha=0;
}
ddrval = lpDDSBack->Unlock(NULL);
if( ddrval != DD_OK ) return( false );
ddrval = lpDDSBuffer->Unlock(NULL);
if( ddrval != DD_OK ) return( false );
|
|