代码之家  ›  专栏  ›  技术社区  ›  Walt W

C#/Silverlight/WPF/快速渲染大量圆

  •  9
  • Walt W  · 技术社区  · 14 年前

    我想在silverlight或wpf(大约1000-10000)中以尽可能快的频率渲染许多圆形或小图形。如果我必须使用DX或OGL,那很好,但是我想先在这两个框架中的任何一个框架中使用它(阅读:如果答案是WPF only或Silverlight only,那就可以了)。另外,如果有一种方法通过WPF访问DX并以这种方式在曲面上渲染,我也会对此感兴趣。

    顺便说一下,这些圆会移动每一帧,所以缓存不是一个真正的选择,除非你建议缓存单个圆。但它们的大小是动态的,所以我不确定这是一个很好的方法。

    5 回复  |  直到 14 年前
        1
  •  5
  •   Anvaka    14 年前

    在Silverlight3.0+中,您很可能会为此使用WriteableBitmap。在WPF中,它也可能是一个很好的选择。

    我用Silverlight编写了两个演示应用程序。他们可能是小马车,但他们证明了这一点。

    1. Hello world application

    alt text http://img42.imageshack.us/img42/5629/helloworld.jpg

    1. Slide show application . 我记不起这里有多少东西了,但已经有一万多了。

    alt text http://img11.imageshack.us/img11/5264/slideshowa.jpg

        2
  •  4
  •   Rene Schulte    14 年前

    查看 WriteableBitmapEx library 对于Silverlight,它肯定也会与WPF一起工作。圆的功能被引入 this blog post 包括一个样品。

        3
  •  2
  •   ben    14 年前

    如果你想速度不要使用绘制椭圆-预生成大小和颜色的圆,并使用写位图,你会得到充分的BitBlt加速。

    使用抗锯齿线绘制是缓慢的,但对大多数事情是可以的,因为它可以改变结果可以缓存,你得到多个帧的结果。

    但是,如果您想尽快绘制,请使用不透明位图。

        4
  •  2
  •   user164771 user164771    14 年前

    虽然您已经接受了答案,但如果您发现需要使用DirectX9(与更高版本的inter-op有点困难,但仍然可以完成(取决于硬件)),您可以使用D3DImage组件。在代码项目中有详细说明 Here .

    另一个选项是,您可以使用一个主机一个WinForms控件,并使用该控件的hWnd创建D3D设备。