首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用放大的GraphicsPath真的很慢

使用放大的GraphicsPath真的很慢
EN

Stack Overflow用户
提问于 2013-04-04 12:30:58
回答 1查看 772关注 0票数 0

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

我正在一个面板上绘制几千个具有经度坐标的GraphicsPath对象。最初,这些图形路径必须放大(实际上是转换-4矩阵转换)。然后,用户可以移动地图,缩放,每一个动作要求重新绘制图形路径。

问题是,当缩放级别在2000-10000左右时,整件事情仍然是有响应的,但是当它达到数十万次(即街道级缩放)时,要花太长时间来绘制并导致整个应用程序没有响应。检查一下空闲内存,仍然有足够的内存。CPU的使用情况仍然可以。

为什么当缩放因子增加时,用相同的4个矩阵变换,绘制相同的数千个图形路径变得非常缓慢?在处理大量图形路径坐标时,System.Graphics本身是否存在问题?你们面临过同样的问题吗?

  • 对不起,好朋友,因为没有包括代码:下面是“慢速”代码块:基本的_paint方法的迭代部分。它运行30,000多个Graphics路径,大多数是从esri shp文件中提取的多行代码。X的坐标是+和y是颠倒的,因此需要在面板上绘制所需的矩阵变换。问题是在低值变量zI上,它比高值变量zI快得多.高值zi意味着大部分图形路径都在绘制区域之外。我试图通过检查isVisible或设置矩形界来减少zi的数量。但这还不够快。有什么想法吗? GraphicsPath vectorDraw in currentShape.vectorPath) {GraphicsPath paintPath = (GraphicsPath)vectorDraw.Clone();OperationMatrix =新矩阵();OperationMatrix.Translate(-DisplayPort.X,-DisplayPort.Y);paintPath.Transform( OperationMatrix );OperationMatrix=新矩阵();OperationMatrix.Scale(zI,zI);paintPath.Transform( OperationMatrix );OperationMatrix =新矩阵(1,0,0,-1,0,DisplaySize.Height);paintPath.Transform(OperationMatrix);OperationMatrix=新矩阵();OperationMatrix.Translate(ClientGap.Width,-ClientGap.Height);paintPath.Transform(OperationMatrix);//if (WiredPort.IsVisible(paintPath.GetBounds(() //徒劳的尝试//{ Pen LandBoundariesPen =新钢笔(Color.FromArgb(255,225,219,127));GraphContext.DrawPath(LandBoundariesPen,paintPath);//这是最慢的部分。当评论的时候,它走得更快。pathCountX++;}

救命..。:)

EN

回答 1

Stack Overflow用户

发布于 2013-04-04 12:48:00

对于高性能渲染,directX是在WPF之上推断的。您还可以考虑在C#中使用opengl。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15811223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档