DirectDraw篇
DxVBLib.DirectDraw7 dDraw
按照剛才所說的步驟,先由dx-------DirectX7結構實體來創建一個DDraw接口實體用來完成後面的步驟;
DxVBLib.DirectDraw7 dDraw=dx. DirectDrawCreate(guid);
GUID是一個長達128位的結構(Structrue),是接口的代號對每一個借口都是不同的,可以用dx.CreateNewGuid()或者System.Guid.NewGuid().ToString()獲得。其實我們在這裡並不需要通過這個GUID接口來訪問DDraw接口的實體,所以讓GUID=""就可以了.
設置DDraw的顯示方式;
dDraw. SetCoOperativeLevel(this.Handle.ToInt32(),
DxVBLib.CONST_DDSCLFLAGS.DDSCL_NORMAL);
frm就是當前窗體。這裡我們先建立一個非獨占的DDraw用來在我們的窗體上顯示圖像。
DxVBLib.CONST_DDSCLFLAGS.下面的對象可以用於DDraw模式的設置。
file://DxVBLib.CONST_DDSCLFLAGS.DDSCL_FULLSCREEN(全屏模式)
file://DxVBLib.CONST_DDSCLFLAGS.DDSCL_ALLOWMODEX(允許使用ModeX)
file://DxVBLib.CONST_DDSCLFLAGS.DDSCL_EXCLUSIVE(獨占模式)
上面幾種是常用的模式。其中後面兩種必須與DDSCL_FULLSCREEN一起使用。使用多個參數用以下格式
參數1|參數2|參數3
其它的DirectX的參數用法也是相同的,這些參數也就是一些功能的開關,直接會影響到顯示的效果。要了解其他參數最好還是看看在線幫助。
設置DirectDrawSurface7,Surface是DirectDraw用來存放圖像信息和顯示圖像的內存/顯存區域,也就是DDraw控制顯示圖像的實體。它是通過一個DDSURFACEDESC與之對應來設置,該存儲區的解釋方式,和信息格式等信息。並不是所有的Surface都是可見,有的Surface僅僅是用於存儲將要處理的圖像信息。因此,顯示的內存區域PRIMARYSURFACE和OVERLAY一般都在顯存。(OverLay需要硬件支持,一般用作桌面懸浮層,它的顯示區域是專門劃分的有別於普通的顯存)而其它的surface一般都是放在系統內存中,當然你也可以使用DSCAPS_VIDEOMEMORY/ DDSCAPS_SYSTEMMEMORY來指定surface存放的位置。我現在就需要兩個surface,一個作為Primary,另一個則是用作存放從硬盤讀取來的圖片數據。最後,再把數據轉換到Primary。
PrimarySurface如此之重要,是不能直接操作的。
DxVBLib.RECT rect,rectSec;
DxVBLib.DDSURFACEDESC2 dDDesc=new DxVBLib.DDSURFACEDESC2();
DxVBLib.DirectDrawSurface7 dDsurface;
DxVBLib.DDSURFACEDESC2 dDDesc1=new DxVBLib.DDSURFACEDESC2();
DxVBLib.DirectDrawSurface7 dDsurfaceSec;
dDDesc.lFlags=DxVBLib.CONST_DDSURFACEDESCFLAGS.DDSD_CAPS; dDDesc.ddsCaps.lCaps=DxVBLib.CONST_DDSURFACECAPSFLAGS.DDSCAPS_PRIMARYSURFACE;
dDsurface=dDraw.CreateSurface(ref dDDesc);
dDsurfaceSec=dDraw.CreateSurfaceFromFile("c:\\3.bmp",ref dDDesc1);
rect.Top=0;
rect.Left=0;
rect.Right=dDDesc1.lWidth; / /按圖片本身大小顯示
rect.Bottom= dDDesc1.lHeight;
dDsurface.BltFast(0,0,dDsurfaceSec,ref rect,DxVBLib.CONST_DDBLTFASTFLAGS.DDBLTFAST_WAIT);//將圖象在屏幕上顯示