我正在構建一個歌曲可視化,我需要計算每個〜50ms一個新的位圖,並通過在一個圖片框上繪製來顯示它。使用XNA/DirectX的DrawImage/DrawLine
不幸的是,使用DrawImage/DrawLine時,此圖像的渲染/繪製性能不是很快。
有沒有辦法通過使用XNA/DirectX進行改進?
哪一個更適合這項任務?
任何示例?
我正在構建一個歌曲可視化,我需要計算每個〜50ms一個新的位圖,並通過在一個圖片框上繪製來顯示它。使用XNA/DirectX的DrawImage/DrawLine
不幸的是,使用DrawImage/DrawLine時,此圖像的渲染/繪製性能不是很快。
有沒有辦法通過使用XNA/DirectX進行改進?
哪一個更適合這項任務?
任何示例?
我同意以類似於winforms示例的方式使用xna。
我認爲你可能通過渲染位圖或使用SpriteBatch而不是通過創建一個動態頂點緩衝區來包含所有行的所有端點來獲得最佳外觀和性能。然後使用DrawUserPrimitives()並指定primitiveType參數爲PrimitiveType.LineList。
這會將所有這些點發送到GPU,您可以在線上創建各種效果(着色器),而GPU則完成所有繁重工作。
應用程序中心的教育部分中的一些示例使用這種渲染來製作網格。想到的是perPixelLighting sample。你可能(或可能不需要)在3D空間中工作。
嗯所以實際上沒有使用第三方框架沒有直接的解決方案? – nr1
@ nr1 XNA是第一方框架。查找App Hub上的XNA WinForms示例,瞭解如何將XNA與WinForms一起使用。 –
@ Nr1查看最後一個鏈接,你仍然可以選擇直接寫入位圖,也許它足夠快。我仍然確定,您的問題不在於繪圖性能,而在於訪問和修改託管內存的方式。使用XNA,SlimDX等,你會得到很多開銷,只是爲了填充圖像...我相信,通過適當的優化,你可以使用普通的位圖來完成。當然,取決於位圖的大小。 – dowhilefor