Java fillPolygon极大地降低了我的应用程序的速度

Java fillPolygon极大地降低了我的应用程序的速度,java,bufferedimage,graphics2d,Java,Bufferedimage,Graphics2d,我正在创建一个java植入,作为一个爱好项目。我正在使用HW accelerated Graphics2D在BuffereImage上绘制多边形,这是可行的,但是调用fillPolygon()多次会在速度方面削弱应用程序 所以现在我的问题是:有没有办法加快这一进程 private BufferedImage createImage() //Gets called once { BufferedImage bImage = new BufferedImage(widt

我正在创建一个java植入,作为一个爱好项目。我正在使用HW accelerated Graphics2D在BuffereImage上绘制多边形,这是可行的,但是调用fillPolygon()多次会在速度方面削弱应用程序

所以现在我的问题是:有没有办法加快这一进程

private BufferedImage createImage() //Gets called once
{
    BufferedImage           bImage  = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
                            bImage.setAccelerationPriority(1);
    Graphics2D              g2d     = (Graphics2D) bImage.getGraphics();
                            g2d.setRenderingHint(
                                RenderingHints.KEY_ANTIALIASING,
                                RenderingHints.VALUE_ANTIALIAS_ON);
                            g2d.setRenderingHint(
                                RenderingHints.KEY_COLOR_RENDERING,
                                RenderingHints.VALUE_COLOR_RENDER_SPEED);
    this.g2d = g2d;

    return bImage;
}
private void reDraw() //Gets called every frame
{
    drawBackground(g2d);

    for(int i = 0; i < polygonList.getLength(); i++)
    {
        polygonList.get(i).draw(g2d);
    }
}
public void draw(Graphics2D g2d)
{
    if(rgba[3] != 0f)
    {
        g2d.setColor(new Color(rgba[0], rgba[1], rgba[2], rgba[3]));
        g2d.fillPolygon(this);
    }
}
private buffereImage createImage()//调用一次
{
BufferedImage bImage=新的BufferedImage(宽度、高度、BufferedImage.TYPE_4BYTE_ABGR);
b设置加速优先级(1);
Graphics2D g2d=(Graphics2D)bImage.getGraphics();
g2d.setRenderingHint(
RenderingHists.KEY\u抗锯齿,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(
RenderingHipts.KEY\u颜色\u渲染,
渲染提示。值(颜色、渲染速度);
this.g2d=g2d;
返回双图像;
}
私有void reDraw()//每帧调用一次
{
牵引地面(g2d);
对于(int i=0;i
通过使用java.awt.Graphics,除了java的常规优化(减少对象创建和函数调用等),您在提高性能方面无能为力。但是,您可以像我看到的那样,使用
RenderHint
s选择它在其末端的渲染方式;我建议您将所有提示设置为加速,包括禁用抗锯齿,因为这实际上是最大的成功之一

除此之外,我可以看到您正在使用一些数组,我可以假设这些数组是int,并用它们创建一种颜色,现在我不确定这是从哪个类来的(假设它们都来自一个类,请纠正我)-除非
if
语句可以改为返回(这不会有多大帮助),当颜色发生变化时,您应该缓存该颜色,我建议不要使用rgba数组,而是使用一个全局颜色实例,然后在需要时使用
getRed/Green/Blue


如果您需要更多建议,您可以将此操作移动到

在绘图外部创建颜色,可能不使用浮动。
要在BuffereImage上绘制多边形,
-如果要在BuffereImage上绘图,则只需执行一次。然后你可以使用Graphics.drawImage(…)方法来绘制BuffereImage。多边形的形状是什么?如果你能很容易地将其分解成三角形,并在每一帧中使用这些三角形,你可能会得到一些提升。@camickr我不明白,我如何一次绘制(例如)50个多边形?这个问题似乎是离题的,因为它是关于优化工作代码的。谢谢你的建议。您提到awt图形天生就是慢的,是否有其他包提供更好的性能,可能是以方便为代价?@user1870238我唯一使用过的其他图形API是LWJGL-非常适合将图形负载减少到几乎为零,但不幸的是,我不知道如何将最终渲染的图像作为缓冲图像。