1
我需要绘制一张代表高度轮廓的图片,以便快速绘制图像。这是一个包含50,000高度或更高的高度剖面图。我正在使用AChartEngine,但是对于这个数量巨大的线条,绘制和缩放的速度并不是很快。有没有其他的lib适合这个建议?你认为.svg绘图会更好吗?如何高效地绘制数千行图纸?
感谢您的建议。
我需要绘制一张代表高度轮廓的图片,以便快速绘制图像。这是一个包含50,000高度或更高的高度剖面图。我正在使用AChartEngine,但是对于这个数量巨大的线条,绘制和缩放的速度并不是很快。有没有其他的lib适合这个建议?你认为.svg绘图会更好吗?如何高效地绘制数千行图纸?
感谢您的建议。
我不知道任何现有的库在做你想做的。如果你想自己编码,这是我的想法。难点主要在于缩放,因为否则您可以预先计算整个图像。我想最好的方法是分层预计算。例如,您可以预先计算:
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,你也许能避免使算法缓存忘却。如果您还有其他问题,请告诉我。
OpenGL在C或Java中怎么样?我建议使用接受数组的批处理方法,以便只调用一次本地方法,并回收您可能创建的任何对象。使用硬件加速画布可能也可以达到同样的效果。 – Tom