程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> DirectDraw之C#入門攻略(2)

DirectDraw之C#入門攻略(2)

編輯:關於C語言

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);//將圖象在屏幕上顯示

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved