|
|
1
5
使用路径的想法是将许多(在您的示例中为20)行批处理到单个方法调用中,而不是调用DrawLine 20次。只有在可以将输入数据排列为绘图例程的正确点列表格式时,这才会对您有所帮助。否则,您将不得不将点复制到正确的数据结构中,这将浪费大量通过批处理到路径中获得的时间。在DrawPath的情况下,可能必须从点阵列创建GraphicsPath,这可能不会节省时间。但是,如果您必须多次绘制同一条路径,您可以缓存它,然后您可能会看到一个净好处。 如果将新点添加到列表中,但未删除旧点(即,您始终只是将新线添加到显示中),则可以使用屏幕外位图来存储迄今为止渲染的线。这样,每次添加一个点时,您都可以进行绘制 线,而不是每次都画80条线。 这完全取决于你想做什么。 |
|
2
2
|
|
|
3
1
这与System.Drawing的速度差不多。您可能会看到使用
提高速度的一个可靠方法是降低输出的质量。设置
另一种方法是使用Direct2D,如果您有合适的硬件,它可以比GDI更快。 |
|
|
4
1
我创建了一个小型库GLGDI+,它使用类似(但不是完全/相等)的GDI+语法,在OpenTK上运行: http://code.google.com/p/glgdiplus/ 我不确定它的稳定性,它在DrawString方面有一些问题(OpenTK的文本打印问题)。但是,如果您的实用程序需要性能提升(就像我的例子中的level editor),它可以是一个解决方案。 |
|
5
0
您可能想查看画笔对象,确实GDI+程序无法获得接近实时的性能,但只要对象的几何体和数量保持在合理的范围内,您就可以轻松地保持良好的fps。至于画线,我不明白为什么不行。 但是如果你达到了你认为最理想的程度,那就是画线。。你应该考虑一个不同的图形栈,如果你喜欢.NET,但是与OpenGL和DirectX之类的非托管API有问题,去WPF或Silverlight,它是非常强大的。 无论如何,您可以尝试设置System.Drawing.Drawing2D.GraphicsPath,然后使用System.Drawing.Drawing2D.PathGradientBrush以这种方式应用颜色。这是一个单缓冲draw调用,如果您不能从中获得足够的性能。你将不得不完全使用GDI以外的东西+ |
|
|
6
0
根本不是GDI(+),但解决这个问题的一种完全不同的方法可能是使用一块内存,在其中画线,将其转换为
当然,这在很大程度上取决于快速实现目标的方法
我想不是在.NET框架中,而是在第三方库中?不是有一个 bitmap writer 至少这可能是一种开箱即用的方法。希望能有帮助。 |
|
|
7
0
还有一件事,如果在onPaint()中编写绘图线代码会更好。
|