在C中渲染圖形#
回答
是的,我寫了一個包裝DirectX 9.0的Windows窗體控件,並提供對視頻表面的直接像素級別操作。
其實我寫了一篇關於堆棧溢出的另一篇文章中,詢問是否有其他更好的方法:Unsafe C# and pointers for 2D rendering, good or bad?
雖然這是比較高的性能,它需要的不安全編譯器選項,因爲它使用指針來有效地訪問內存。因此之前這篇文章的原因。
這是一個高層次的需要的步驟:
- 下載了DirectX SDK。
- 創建一個新的C#Windows Forms項目並參考安裝的 Microsoft DirectX程序集。
- 用您需要的演示參數 (窗口化,後臺緩衝等)初始化新的DirectX設備對象。
- 創建設備,注意記錄表面「間距」和當前顯示模式(每像素位數)。
- 當你需要顯示東西時,
Lock
緩衝器 表面和存儲返回的指針表面 內存的開始。 - 使用指針算術,根據每個像素的表面間距, 位數和實際的x/y像素座標計算 數據中的實際像素位置。爲了簡單起見,我堅持使用32 bpp,這意味着設置一個像素就像下面這樣簡單:*(surfacePointer +(y * pitch + x))= Color.FromARGB(255,0,0);
- 完成繪圖時,
Unlock
後臺緩衝區表面。呈現表面。 - 根據需要重複步驟5。
請注意,採取這種方法時,您需要非常小心地檢查目標表面的當前顯示模式(螺距和位數)。此外,您還需要制定策略來處理窗口大小調整或在程序運行時更改屏幕格式。
您可以嘗試使用Visual Studio和/或Expression Blend查看WPF。我不確定你有多複雜,但它應該能夠處理一個簡單的編輯器。查看MSDN Article瞭解更多信息。
託管DirectX(Microsoft.DirectX命名空間)可以獲得更快的3D圖形。它是DirectX API的穩定.NET包裝器,具有創建性能的一點點。NET對象和編組。除非您正在編寫全功能的現代3D引擎,否則它將正常工作。
窗口演示基礎(WPF)(Windows.Media命名空間) - 二維圖形的最佳選擇。也具有有限的3D能力。旨在用矢量替換Windows窗體,硬件加速解決方案獨立框架。非常方便,支持幾種風格的自定義控件,資源,數據綁定,事件和命令......也有一些WTF。速度通常比GDI更快並且比DirectX速度更慢,並且很大程度上取決於你如何做事(以合理的方式重寫之後,看到某些工作快了60倍)。我們成功地在一臺(而不是最好的)個人電腦上實現了3個1280x1024屏幕,其中充滿了實時指標,圖表和圖表。
您可能會看到Cairo graphics library。 Mono項目已經綁定了C#。
Cairo是一個選項。我目前正在使用GDI +和Cairo重寫我的地圖繪製軟件。它有一個瓷磚地圖生成器,以及其他功能。
- 1. 渲染圖形在C到VB控制
- 2. iOS圖形渲染
- 3. 使用SFML在C++中將字形渲染爲位圖圖像
- 4. 在opengl中渲染1000多個圖形
- 5. 在OpenGL中渲染矢量圖形?
- 6. Highcharter樹形圖不在shinydashboard中渲染
- 7. 在Sweave中渲染網格圖形
- 8. 在Python和Javascript中渲染圖形
- 9. C#的渲染圖
- 10. 控制渲染SVG圖形?
- 11. dc.js渲染條形圖
- 12. 使用tcpdf渲染圖形
- 13. WebGL圖形渲染引擎
- 14. JFrame隨機渲染圖形
- 15. X11 - 圖形渲染改進
- 16. 在SDL 2.0中渲染地圖C++
- 17. 從OpenGL中的位圖渲染地形
- 18. Android中的動態圖形渲染
- 19. 如何在ToolStrip上渲染圖形
- 20. D3軸渲染在圖形的頂部
- 21. 在c中的Unicode渲染#
- 22. OpenGL在矩形內渲染
- 23. 關於圖形/渲染的C++/CLI或純C++
- 24. PyGame - 渲染形狀
- 25. 如何在Android上使用OpenGL渲染2D圖形/圖形?
- 26. 將DirectX 3D圖形直接渲染到圖像上,使用C#
- 27. 在Libgdx中渲染圖像
- 28. 在java中渲染圖像
- 29. 渲染在視圖
- 30. 在XNA/C中渲染多個紋理在地形上#
大衛,剛剛注意到你的問題「理解指針」。偉大的問題,偉大的答案!在這篇文章中提到的所有觀點也適用於我下面的「不安全」答案。 – Ash 2008-09-12 03:34:21