2014-01-08 48 views
1

我需要绘制一张代表高度轮廓的图片,以便快速绘制图像。这是一个包含50,000高度或更高的高度剖面图。我正在使用AChartEngine,但是对于这个数量巨大的线条,绘制和缩放的速度并不是很快。有没有其他的lib适合这个建议?你认为.svg绘图会更好吗?如何高效地绘制数千行图纸?

感谢您的建议。

+0

OpenGL在C或Java中怎么样?我建议使用接受数组的批处理方法,以便只调用一次本地方法,并回收您可能创建的任何对象。使用硬件加速画布可能也可以达到同样的效果。 – Tom

回答

0

我不知道任何现有的库在做你想做的。如果你想自己编码,这是我的想法。难点主要在于缩放,因为否则您可以预先计算整个图像。我想最好的方法是分层预计算。例如,您可以预先计算:

pre-compute(region r) 
    l = the list of lines intersecting with r 
    if l has less than T1 number of lines: 
     pre-compute the image in r with l; 
    else 
     divide r evenly into four subregions r1,r2,r3,r4 
     pre-compute(r1) 
     pre-compute(r2) 
     pre-compute(r3) 
     pre-compute(r4) 

也可以高速缓存与任何区域相交的行的列表。您可以将预先计算的图像和行列表缓存在四叉树中。如果您添加/删除线条,您也可以在树中逐渐添加/删除线条。那么当你画,你可以使用下面的算法:

draw(region r): 
    if r is a subset of a pre-computed region: 
     draw r using the pre-computed image 
    else 
     if r is smaller than T2: 
      l = the list of lines intersecting with r 
      if l has less than T1 number of lines: 
       draw r with l 
       return 
     divide r evenly into four regions r1, r2, r3, r4 
     draw(r1) 
     draw(r2) 
     draw(r3) 
     draw(r4) 

在此算法的怪癖可能是选择合适的阈值T1,T2,你也许能避免使算法缓存忘却。如果您还有其他问题,请告诉我。