Почему рисование пикселей напрямую медленнее, чем рисование данных в BufferedImage? - PullRequest
0 голосов
/ 07 июля 2019

В настоящее время я пытаюсь создать что-то для отображения «2D-вида» для сетки, который можно использовать для различных пропорций, например, для простой 2D-игры.

После выполнения обтекания с помощью простойБазовый класс (он содержит всю информацию для моего визуального материала, включая значения пикселей для спрайтов). Я начал визуальную работу.Поскольку моя цель состоит в том, чтобы сделать это с обычным Swing / AWT в Java, я просто создал пользовательский JComponent для этого.

В моем JComponent я попробовал несколько подходов и решил проверить информацию о своих пикселях вBufferedImage а с другой стороны нарисуйте пиксели прямо в графическом объекте.

Просматривая интернет, я нашел несколько способов нарисовать пиксель / точку на экране, например 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 мсек, чтобы закончить, в то время как пиксели отнимают 200 мс + на то же количество "работы".

Тогда, почему это так отличается?Должен ли я избегать любых итераций в пикселях?

...