我需要在2D位图上绘制很多小椭圆(约60 000)。根据我的经验,GDI +或NGraphics证明这种任务非常缓慢。我希望能够达到至少10 fps,这似乎并不太雄心勃勃,但我不知道如何。
由于视频游戏非常有效地完成这类工作,我很想知道这是硬件加速的问题。但我在另一个问题中看到GDI +应该是2D加速的,所以也许还有其他我没有得到的东西。
我的问题不是关于闪烁或双缓冲。这实际上是一个纯粹的速度问题:在位图上绘制简单形状(像素,线条,椭圆)的最快方法是什么。
答案 0 :(得分:1)
在GDI中,最快的方式将获得一个Graphics
对象(例如在OnPaint()方法中)并调用例如DrawEllipse()
就可以了。
但你必须检查自己是否可能并非所有这些都是可见的并跳过这些。您也可以尝试通过设置图形对象的CompositingQuality
,InterpolationMode
,PixelOffsetMode
和SmoothingMode
来调整性能。
但也许使用像WPF,OpenGL或DirectX这样的不同技术会更有意义。甚至切换到Unity可能是一种选择。但那是一个完全不同的故事。
答案 1 :(得分:0)
你可以试试OpenTK。它使用OpenGL并且速度非常快。您可以获取绘图操作的结果,并在需要时将其转换回位图。
答案 2 :(得分:0)
您可以尝试使用SkiaSharp,它比GDI +快,但是我不知道它是否可以处理60万行/秒。
Skia的C#/ .Net包装器
SkiaSharp SkiaSharp managed by "Xamarin/Microsoft"的文献记载
斯基亚图书馆的文献资料skia.org。
window
SkiaSharp
; using SkiaSharp
绘制椭圆的代码:
canvas.DrawOval ( cx, cy, rx, ry, paint)
参数: cx 。中心x坐标。
cy 。中心y坐标。
rx 椭圆的垂直半径。
ry 椭圆的水平半径。
绘画:绘制椭圆形时要使用的绘画。