Двойная буферизация в 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
выделяется в первый раз, а затем используется повторно, поэтому он используется не только один раз.