0

您知道 Graphics 对象如何使用资源吗?

我在面板上绘制了数千个带有经纬度坐标的 GraphicsPath 对象。最初,那些 Graphicspaths 必须被缩放(转换 - 实际上是 4 个矩阵转换)。然后用户可以移动地图,缩放,每个动作都需要重新绘制图形路径。

问题是,当缩放级别在 2000-10000 左右时,整个东西仍然响应,但是当它达到数十万(这是街道级别缩放)时,绘制时间太长,导致整个应用程序无响应。检查可用内存,仍然很多。CPU使用率还可以。

当缩放因子增加时,如何绘制相同的数千个图形路径,每个具有相同的 4 个矩阵变换变得非常慢?处理大量图形路径坐标时 System.Graphics 本身存在问题吗?你们有没有遇到过同样的问题?

  • 对不起,好人,不包括代码:所以这里是“慢”代码的一部分:基本上是 _paint 方法的迭代部分。它运行超过 30,000 个图形路径,大多数是从 esri shp 文件中提取的折线。x 的坐标是 + 并且 y 是 - 并且上下翻转,因此需要在面板上绘制所需的矩阵变换。问题在于低值变量 zI,它比高值变量 zI 快得多。高值 zi 意味着大部分图形路径在绘制区域之外。我尝试通过检查 isVisible 或通过与矩形边界相交来减少 zi 的数量。但这还不够快。有任何想法吗?

                foreach (GraphicsPath vectorDraw in currentShape.vectorPath)
                {
                    GraphicsPath paintPath = (GraphicsPath)vectorDraw.Clone();
    
    
                    OperationMatrix = new Matrix();
                    OperationMatrix.Translate(-DisplayPort.X, -DisplayPort.Y);
                    paintPath.Transform(OperationMatrix);
                    OperationMatrix = new Matrix();
                    OperationMatrix.Scale(zI, zI);
                    paintPath.Transform(OperationMatrix);
                    OperationMatrix = new Matrix(1, 0, 0, -1, 0, DisplaySize.Height);
                    paintPath.Transform(OperationMatrix);
    
                    OperationMatrix = new Matrix();
                    OperationMatrix.Translate(ClientGap.Width, -ClientGap.Height);
                    paintPath.Transform(OperationMatrix);
    
                    //if (WiredPort.IsVisible(paintPath.GetBounds())) //Futile attempt
                    //{
    
                    Pen LandBoundariesPen = new Pen(Color.FromArgb(255, 225, 219, 127));
    
                    GraphContext.DrawPath(LandBoundariesPen, paintPath); // this is the slowest part. When commented it goes faster.
    
                    pathCountX++;
                }
    

帮助 .... :)

4

1 回答 1

0

对于高性能渲染,directX 优于 WPF。您也可以考虑在 C# 中使用 opengl。

编辑:有关如何通过 TAO 框架在 C# 中使用 Open GL 的教程,请访问以下链接:http: //xinyustudio.wordpress.com/2008/12/01/using-opengl-in-c-taoframework/

于 2013-04-04T12:48:00.853 回答