Двойная буферизация в Java

Я нашел этот код двойной буферизации в Интернете, но он не имеет объяснения. Я немного запутался в этом коде.

  • Почему используется изображение "я"? Какая польза от него, если он будет использован один раз?

  • Почему мы назначаем изменение цвета для цвета переднего плана, когда мы уже установили цвет?

  • Что делает метод g.drawImage()?

Вот код:

public void update(Graphics g)
{
    if(i==null)
    {
        i=createImage(getWidth(), getHeight());
        graph=i.getGraphics();
    }

    graph.setColor(getBackground());
    graph.fillRect(0, 0, getWidth(),getHeight());
    graph.setColor(getForeground());

    paint(graph);

    g.drawImage(i,0,0,this);
  }

С уважением

2 ответа

Решение

Основная идея двойной буферизации - создать изображение вне экрана, а затем отобразить все сразу.

Двойная буферизация

Из учебных пособий по Java, найденных здесь

Код, который у вас есть, сначала создает изображение с первого бита, чтобы быть вашим "обратным буфером", скорее всего, это поле типа

 private Image i;
 private Graphics graph;

 if(i==null)
{
    i=createImage(getWidth(), getHeight());
    graph=i.getGraphics();
}

Затем рисует цвет фона на изображение с этим

graph.setColor(getBackground());
graph.fillRect(0, 0, getWidth(),getHeight());

Затем устанавливает фронт готов к рисованию.

graph.setColor(getForeground());
paint(graph); /draws

Наконец, оттягивая задний буфер на первичную поверхность.

g.drawImage(i,0,0,this);

Все графические операции выполняются на Graphics получен из i, который является растровым изображением в памяти.

Когда они закончены, растровое изображение рисуется на "реальный" (экран) Graphics объект g, Таким образом, пользователь никогда не увидит неполный рисунок, который устраняет мерцание.

Поле i выделяется в первый раз, а затем используется повторно, поэтому он используется не только один раз.

Другие вопросы по тегам