在c#

时间:2016-01-06 10:35:28

标签: c# graphics gdi+ gdi hardware-acceleration

我需要在2D位图上绘制很多小椭圆(约60 000)。根据我的经验,GDI +或NGraphics证明这种任务非常缓慢。我希望能够达到至少10 fps,这似乎并不太雄心勃勃,但我不知道如何。

由于视频游戏非常有效地完成这类工作,我很想知道这是硬件加速的问题。但我在另一个问题中看到GDI +应该是2D加速的,所以也许还有其他我没有得到的东西。

我的问题不是关于闪烁或双缓冲。这实际上是一个纯粹的速度问题:在位图上绘制简单形状(像素,线条,椭圆)的最快方法是什么。

3 个答案:

答案 0 :(得分:1)

在GDI中,最快的方式将获得一个Graphics对象(例如在OnPaint()方法中)并调用例如DrawEllipse()就可以了。

但你必须检查自己是否可能并非所有这些都是可见的并跳过这些。您也可以尝试通过设置图形对象的CompositingQualityInterpolationModePixelOffsetModeSmoothingMode来调整性能。

但也许使用像WPF,OpenGL或DirectX这样的不同技术会更有意义。甚至切换到Unity可能是一种选择。但那是一个完全不同的故事。

答案 1 :(得分:0)

你可以试试OpenTK。它使用OpenGL并且速度非常快。您可以获取绘图操作的结果,并在需要时将其转换回位图。

答案 2 :(得分:0)

您可以尝试使用SkiaSharp,它比GDI +快,但是我不知道它是否可以处理60万行/秒。

SkiaSharp

Skia的C#/ .Net包装器

SkiaSharp SkiaSharp managed by "Xamarin/Microsoft"的文献记载

斯基亚图书馆的文献资料skia.org

使用SkiaSharp

  1. 添加NuGet软件包window
  2. 添加SkiaSharp;
  3. 绘制椭圆/椭圆形using SkiaSharp

绘制椭圆的代码:

canvas.DrawOval ( cx,  cy,  rx,  ry, paint)

参数: cx 。中心x坐标。

cy 。中心y坐标。

rx 椭圆的垂直半径。

ry 椭圆的水平半径。

绘画:绘制椭圆形时要使用的绘画。