我正在写一个飞镖应用程序,并且实现了一个绘制为BufferedImage的飞镖。快速绘制任意点集合
当渲染飞镖时,我首先迭代BufferedImage的坐标并计算它所在的'段'。我把它包装到一个DartboardSegment中,它基本上只是一个小点集合额外结构的数量(板上对应的数字等)。
目前,实际呈现飞镖盘我个人画的每个点,如下所示:
for (Point pt : allPoints)
{
DartboardSegment segment = getSegmentForPoint(pt);
Color colour = DartboardUtil.getColourForSegment(segment);
int rgb = colour.getRGB();
int x = (int)pt.getX();
int y = (int)pt.getY();
dartboardImage.setRGB(x, y, rgb);
}
显然,这需要一些时间。这不是一个无法容忍的数量(绘制500x500区域需要2-3秒),但是如果可以的话,我想消除这个“滞后”。在我的应用程序的其他领域,我遇到了更快的替代方法(如Graphics.fillRect())。
我见过在Graphics类上有一个fillPolgyon()方法,但是我不认为我可以很容易地将我的片段转换成多边形,因为它们的形状各不相同(例如三元组的形状,红心......)。在Java中有更快的方法来绘制一个任意的点数组,而不是循环遍历和单独绘制?
,我想向编写的代码是一样的东西:
for (DartboardSegment segment : allSegments)
{
Color colour = DartboardUtil.getColourForSegment(segment);
Polgyon poly = segment.toPolygon();
Graphics gfx = dartboardImage.getGraphics();
gfx.setColor(colour);
gfx.fillPolygon(poly);
}
在时间绘画500由500个像素的一个像素的面积应大于2秒时间相当少(我的电脑上,填充其随机数据大约需要20ms)。因此,我怀疑你的问题不是用'dartboardImage.setRGB(x,y,rgb);'用'getSegmentForPoint()'或'DartboardUtil.getColourForSegment()'。你能告诉我们这些方法的代码吗? –
它们本质上都是hashmap查找,除了第一次迭代时hashmap将被构建。 实施我描述的改变后,时间已经缩短到0.3秒,这就是所谓的相同的两种方法。不知道为什么你看不到相同的行为。 –