Иллюстрированный самоучитель по Java



              

Улучшение изображения двойной буферизацией


Суть двойной буферизации в том, что в оперативной памяти создается буфер — объект класса image или Bufferedimage, и вызывается его графический контекст, в котором формируется изображение. Там же происходит очистка буфера, которая тоже не отражается на экране. Только после выполнения всех действий готовое изображение выводится на экран.

Все это происходит в методе updateo, а метод paint о только обращается к update (). Листинги 15.10—15.11 разъясняют данный прием.

Листинг 15.10.

Двойная буферизация с помощью класса image

public void update(Graphics g){

int w = getSize().width, h = getSize().height;

// Создаем изображение-буфер в оперативной памяти 

Image offlmg = createlmage(w, h);

// Получаем его графический контекст 

Graphics offGr = offImg.getGraphics();

// Меняем текущий цвет буфера на цвет фона 

offGr.setColor(getBackground());

//и заполняем им окно компонента, очищая буфер 

offGr.fillRect(0, 0, w, h);

// Восстанавливаем текущий цвет буфера 

offGr.setColor(getForeground());

// Для листинга 15.9 выводим в контекст изображение 

offGr.drawlmage(img[count % 10], 0, 0, this);

// Рисуем в графическом контексте буфера

// (необязательное действие) 

paint(offGr);

// Выводим изображение-буфер на экран

// (можно перенести в метод paint()) 

g.drawlmage(offlmg, 0, 0, this); }

// Метод paint() необязателен 

public void paint(Graphics g)J update(g); }

Листинг 15.11.

Двойная буферизация с помощью класса Bufferedimage

public void update(Graphics g){ 

Graphics2D g2 = (Graphics2D},g; 

int w = getSize().width, h = getSize().height;

// Создаем изображение-буфер в оперативной памяти 

Bufferedimage bi = (Bufferedimage)createlmage(w, h);

// Создаем графический контекст буфера 

Graphics2D big = bi.createGraphics();

// Устанавливаем цвет фона 

big.setColor(getBackground());

// Очищаем буфер цветом фона 




Содержание  Назад  Вперед