IDirect3DSurface9 *tmp = NULL; IDirect3DSurface9 *back = NULL; //生成固定颜色模式的离屏表面(Width和 Height为屏幕或窗口的宽高) D3D9Device->CreateOffscreenPlainSurface(Width, Height, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &tmp, NULL); // 获得BackBuffer的D3D Surface D3D9Device->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &back); // Copy一下,,需要时转换颜色格式 D3DXLoadSurfaceFromSurface(tmp, NULL, NULL, back, NULL, NULL, D3DX_FILTER_NONE, 0); =================================================================================
我用这个方法生成的面,不过他的方法关键色的地方我试了 没起作用,也许是我做错了。
我还是习惯我的办法 就是在内存中锁定这个图片内存,然后去判断,如果是黑色的,就把他的A值改成0,这样就透明了。我在别的地方做类似的操作都是这么做的,所以没有用函数上写好的那个ColorKey,更主要的我觉得中间多于一个表面这样的效率不怎么高,我还是喜欢直接锁定数据修改,所以我还在尝试别的方法。 |