我正在构建一个歌曲可视化,我需要计算每个〜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