国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Managed DirectX中的DirectShow應用(簡單Demo及源碼)

2019-11-17 03:13:26
字體:
來源:轉載
供稿:網友

Managed DirectX中的DirectShow應用(簡單Demo及源碼)

閱讀目錄

  • 介紹
  • 準備工作
  • 環境搭建
  • 簡單Demo
  • 顯示效果
  • 其他
  • Demo下載

介紹

  DirectX是Microsoft開發的基于Windows平臺的一組API,它是為高速的實時動畫渲染、交互式音樂和環境音效等高要求應用開發服務的。

  而Managed DirectX 實質上是對DirectX進行了一個輕量級的封裝,Microsoft在2003年10月初發布了Microsoft DirectX 9.0 SDK Update (Summer 2003),其中就著重改進了Managed DirectX部分。一方面使它能與.NET Framework緊密集成,可供.NET 平臺下的其他語言調用 (如C#);另一方面對DirectX程序編寫進行了進一步簡化,使得DirectX向RAD開發的方向又邁進了一大步,如我們所知asp.net、 WinForm這些東西是在網絡上運行的。使得在網頁上看到有硬件加速支持的絢麗的3D動畫實時演示成為可能。

  DirectX的核心是DirectX3D,但早期也是有DirectXDraw(2D),后來2D融入到了3D中,原來有個項目的圖形展示控件是用DirectDraw實現的,為了紀念這些曾經帶來過效益的技術,將這個技術的使用大致講解下。

準備工作

  下載5.0以上的ManagedDirectX SDK包。

  其中有Microsoft.DirectX.DirectDraw.dll,Microsoft.DirectX.dll 這兩個DLL是我們需要的。

環境搭建

  新建工程DirectXShowDemo,選擇Framework2.0(也可以選其他,不過得在app.config中標注下)

簡單Demo

創建設備

1         PRivate Device CreateDevice()2         {3             var device = new Device();4 5             //目前只做成窗口模式,由于全屏模式需要用到Flip,而窗口模式不用使用Flip6             device.SetCoOperativeLevel(this, CooperativeLevelFlags.Normal);7 8             return device;9         }

創建切割器

1         public Clipper CreateCliper()2         {3             var cp = new Clipper();4 5             cp.Window = this;6 7             return cp;8         } 

創建離屏表面

 1         public Surface CreateOffScreenSurface(Bitmap pBitmap, Clipper pClipper) 2         { 3             if (pBitmap == null) 4                 throw new ArgumentNullException("位圖不能為空"); 5  6             //離屏描述 7             SurfaceDescription sd = new SurfaceDescription(); 8             sd.SurfaceCaps.OffScreenPlain = true; 9             Surface surOff = null;10 11 12             surOff = new Surface(pBitmap, sd, _device);13 14             //設置切割器15             if (pClipper != null)16             {17                 surOff.Clipper = pClipper;18             }19 20             return surOff;21         }

在Paint事件中增加代碼

1         private void Form1_Paint(object sender, PaintEventArgs e)2         {3             Rectangle recSource = this.DisplayRectangle;4             Rectangle recTo = M_RctTrance(this.Size);5 6             _surPrimary.Draw(recTo, _surBack, recTo, DrawFlags.Wait);7         }

顯示效果

其他

  由于是演示,所以很多異常判斷都沒做,比如設備丟失,超出顯示范圍等,做的復雜的可以創建多個圖層,且圖層上的元素可以拖動,顯示Tootip,閃爍,選中等效果,也可以多圖層切換。感興趣可以聯系我。

  如果要調試的話,由于DirectXDraw的原因,需要在調試->異常->Managed Debugging Assistants->LoaderLock 取消勾選

Demo下載

源碼下載


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉隆县| 泾川县| 新河县| 云南省| 墨竹工卡县| 万荣县| 海口市| 揭西县| 乌海市| 获嘉县| 浪卡子县| 开封市| 长春市| 南川市| 金塔县| 新和县| 丹巴县| 江安县| 新乡县| 密云县| 西安市| 石台县| 慈利县| 应用必备| 甘泉县| 宿松县| 桐梓县| 闽侯县| 黄石市| 南安市| 浪卡子县| 教育| 棋牌| 榆中县| 丹寨县| 宁国市| 边坝县| 亳州市| 松溪县| 松溪县| 浦江县|