2010-12-02 53 views
1

我试图在NSView的每个drawRect(大约300x300像素框)上使用NSBezierPath绘制大约4000-10000个段。这是非常重要的资源,需要花费很多时间来绘制(相对较长)。使用NSBezierPath绘制至少4000段的快速绘图

有人可以提出一个替代呢?我试过一次只用一个NSBezierPath来处理1000个分段,但它仍然占用过多的资源。

我在找任何可能的选择。我确信OpenGL会更快,但我不知道是否必须学习新的平台才能满足需要。我接受建议。

+1

300 x 300 = 90000和10000段有20000个端点。假设每个片段非常短,例如4个像素,则会添加另外40000个使用过的像素。所以,可能会填充50%或更多的绘图表面,看起来非常混乱。你确定这些数字吗?我错了吗? – 2010-12-02 05:40:53

+0

从第二段我假设那些4000多条路径可以被认为是一个形状的副本/实例,对吧?而且这些细分市场(或者至少是他们的一些子集)的表现在彼此之间是否有所不同? (方向,大小,视觉外观等)更多:它们重叠吗?如果是的话:z顺序是否重要? – Regexident 2010-12-02 16:36:38

回答

4

不是一个答案,只是测试结果

我做了一个简单的实验与数学。这个实验为我们提供了一个绝对的上限,因为我没有使用优化,没有GPU,解释型语言等,所以我认为可以实现一个以上的数量级。

结果:

生成10.000贝塞尔曲线列表

b = Table[ 
    {Hue[RandomReal[]], 
    [email protected][{0, 300}, {4, 2}]}, {10000}]; 

是非常快的,因为数学没有什么评价。

现在渲染:

h1 = AbsoluteTime[]; [email protected][b]; h2 = AbsoluteTime[]; Print[h2 - h1]; 

Time spent 11.8 secs 

结果:

alt text

PS:我们的目的是要为我们的思维定势的时间基准。