|

楼主 |
发表于 2011-8-5 00:40:00
|
显示全部楼层
Re: 如何用Directx实现32位显示模式下的图片颜色渐变
嗯,就是比如我进入游戏,游戏的GUI我点击开始游戏,然后这个GUI界面是慢慢编黑,然后才是开始游戏了!有一个渐变效果!不是立即就黑掉了,我是新手,我是这样想的,把代码贴出来,请大家指点了!显示模式是32位的!
- void Screen_Transitions(LPDIRECTDRAWSURFACE7 lpdds){
- //lpdds是传入进来的表面,要在哪一个表面进行颜色渐变,就是逐渐颜色变黑
- int index; // used as loop counter
- int color;
- DDSURFACEDESC2 ddsd;
- DDRAW_INIT_STRUCT(ddsd);
- lpdds->Lock(NULL,&ddsd,DDLOCK_WAIT|DDLOCK_SURFACEMEMORYPTR,NULL);//锁表面
- int lpitch=ddsd.lPitch>>2;
- DWORD * dest_buffer1=(DWORD *)ddsd.lpSurface;
- for(int index_x=0; index_x <80;index_x ++)
- {
- for(index =0;index <ddsd.dwWidth*ddsd.dwHeight;index ++)
- { //获取R,G,B的值
- UCHAR blue =dest_buffer1 [ index*4 + 1 ];
- UCHAR green=dest_buffer1 [ index*4 + 2 ];
- UCHAR red =dest_buffer1 [ index*4 + 3 ];
- if((color=_RGB32BIT(0,red,green,blue))!=_RGB32BIT(0,0,0,0))//判断是否这一点的像素值为黑色,
- color=_RGB32BIT(0,0,0,0);
- dest_buffer1[index]=color;//不是的话就使这点像素值为0,即为黑色
- dest_buffer1+=ddsd.dwWidth; //内存地址加一个表面的宽度
- }
- }
- lpdds->Unlock(NULL);//解锁表面
- lpitch=0;
- dest_buffer1=NULL;
-
- } // end Screen_Transitions
复制代码
这样是不行的,但是我找不到好的解决办法,望大家指点了!谢谢! |
|