为什么直接绘制像素比在BufferedImage中绘制数据要慢?

时间:2019-07-07 14:51:55

标签: java swing drawing pixel bufferedimage

当前,我正在尝试创建一些东西来显示Grid的“ 2D视图”,该视图可用于各种建议,例如简单的2D游戏。

在使用一个简单的Core类进行包装工作之后(这将所有信息保存到我的视觉东西中,包括精灵的像素值),我开始了视觉工作。我的目标是使用Java中的普通摆动/自动执行此操作,因此我为此创建了一个自定义JComponent

在我的JComponent中,我尝试了一些方法,并决定在BufferedImage中测试绘制像素信息,另一方面直接在Graphics对象中绘制像素。

通过互联网,我发现了一些在屏幕上绘制像素/点的方法,例如this。在这种情况下,我将其包装在一个方法中:

    private void drawSpritePixels(ArrayList<Spr.Pixel> pixels, int startX, int startY, Graphics2D g) {
        for (Spr.Pixel p : pixels){
            g.setColor(p.color);
            g.fillRect(p.x + startX, p.y + startY, 1, 1);
        }
    }

为了将我的数据绘制到BufferedImage上,我使用了以下方法:

    public BufferedImage spriteImage(int spriteAddress) {
        BufferedImage img = GraphicsEnvironment
                .getLocalGraphicsEnvironment()
                .getDefaultScreenDevice()
                .getDefaultConfiguration()
                .createCompatibleImage(32, 32, Transparency.TRANSLUCENT);
        for (Pixel p : getSpriteInfo(spriteAddresses.get(spriteAddress))) {
            img.setRGB(p.x, p.y, p.color.getRGB());
        }

        return img;
    }

正如标题所述,使用BufferedImage方法的性能更好。我的测试BufferedImage花费40毫秒才能完成,而Pixel花费200毫秒以上才能完成相同的“工作”。

那么,为什么这是如此不同?我应该避免像素方法出现任何迭代吗?

0 个答案:

没有答案