我想創建一個簡單的視頻渲染器來玩耍,並做一些事情,比如創建一個僅僅爲了娛樂而使用的移動操作系統。我的父親告訴我,在第一臺電腦中,你會編輯一個特定的內存地址,屏幕會更新。我想在Windows中的窗口中模擬這個。有沒有什麼辦法可以用C#做到這一點?如何編輯窗口中的單個像素?
回答
這是一個全功能的主題,超出了範圍(它不適合,不是我不會漫不經心的幾個小時:-)這個答案..但這應該讓你開始用C#繪圖#
http://www.geekpedia.com/tutorial50_Drawing-with-Csharp.html
事情已經從直接存儲器manipulation..although一切仍然穩居像素昔日走近一點。
編輯:哦,如果遇到閃爍問題並卡住,請給我一條線,我會給你發送一個DoubleBuffered面板來繪製。
這是用來做的,因爲你可以直接訪問視頻緩衝區。這在當今的系統中通常不可用,因爲視頻內存由視頻驅動程序和操作系統管理。此外,視頻內存緩衝區和顯示的內容之間確實沒有1:1映射。有了這麼多的內存,就有可能擁有多個緩衝區並在它們之間切換。當前顯示的緩衝區稱爲「前端緩衝區」,其他未顯示的緩衝區稱爲「後端緩衝區」(更多信息,請參閱http://en.wikipedia.org/wiki/Multiple_buffering)。我們通常寫回緩衝區,然後讓視頻系統爲我們更新前端緩衝區。這會提供平穩的更新,因爲視頻驅動程序會將更新與監視器的掃描速率同步。
要使用C#寫回緩衝區,我最喜歡的技術是使用WPF WritableBitmap。我還使用System.Drawing.Bitmap
通過LockBits向其寫入像素來更新屏幕。
儘管我確信這是一個更好的解決方案,但我並不完全理解代碼並知道自己,我會搞砸大時間與非託管代碼:D – 2010-06-26 04:00:46
@丹尼爾 - 這不是非託管代碼...不安全,當然,但沒有任何其他方式讓它變快。你可以使用GetPixel/SetPixel,但你不能有快。 ;) – codekaizen 2010-06-26 06:00:43
- 1. iPhone - 在單獨的窗口中編輯故事板元素
- 2. Xcode中的多個編輯器窗口
- 3. 如何編輯BufferedImage中的像素?
- 4. Facebook共享窗口 - 我如何編輯?
- 5. 編輯窗口右鍵菜單在C#
- 6. WinApi所有者CComboBox編輯窗口,編輯窗口CComboBox
- 7. 如何從Jqgrid單元格打開一個小窗體或窗口編輯
- 8. 如何通過cli編輯每個像素的PNG圖像?
- 9. 如何使用單個窗體編輯ajax中的數據?
- 10. 允許在一個窗口內設置單個像素的庫
- 11. Node.js - 如何編輯jsdom窗口中的元素並將窗口另存爲新的HTML文件?
- 12. Monodevelop中的窗口GUI編輯器
- 13. WordPress的編輯窗口中修改
- 14. 多編輯器窗口
- 15. 如何使編輯在不同的窗口中打開DataGrid
- 16. 如何在Eclipse RCP的同一窗口中編輯表格行?
- 17. 如何編輯Leaflet中的彈出窗口
- 18. 如何最小化Visual Studio 2010 RC編輯器中的窗口?
- 19. 的OpenCL image2d像素編輯
- 20. 如何配置emacs打開一個寬編輯窗口?
- 21. 控制檯窗口中的C++像素
- 22. 在Qt中編輯無框窗口
- 23. 在Visual Studio中分割編輯窗口
- 24. 如何在asp.net中使用sqlite編輯datagrid窗口窗體中的數據
- 25. 如何在我的窗口中獲取丟失的像素?
- 26. 窗口高度 - 140像素
- 27. 的Eclipse RCP:在使用編輯器窗口中相同的編輯器窗口中打開
- 28. 如何編輯泊塢窗圖像中的文件?
- 29. 如何將圖像綁定到Django中的編輯窗體?
- 30. 如何在App Inventor Blocks編輯器窗口中向下滾動?
在WinForms> v2.0中,可以使用DoubleBuffered屬性的設置打開雙緩衝:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.doublebuffered。 ASPX。 – codekaizen 2010-06-25 19:39:06
但不在面板或任何託管控件上:-D繼續嘗試它..因爲DoubleBuffered屬性是受保護的值,所以它主動忽略您的嘗試。 – Caladain 2010-06-25 19:49:32
對。我想我忘記了,因爲只是子類化面板並在構造函數中設置該屬性非常簡單。無論如何,DoubleBuffered只是將控件樣式設置爲ControlStyles.OptimizedDoubleBuffer的快捷方式| ControlStyles.AllPaintingInWmPaint,所以也可以使用該值調用SetStyle()。 – codekaizen 2010-06-25 20:23:32