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



              

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


// Рисуем горизонтальную прямую 

big.draw(new Line2D.Double(0, 125, w, 125));

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

g2.drawlmage(bi, 0, 0, this); }

public void go(){ 

while(count < 100){ 

repaint(); 

try{

Thread.sleep(10); 

}catch(InterruptedException e){} 

count++; 

public static void main(String[] args){

DrawAniml f = new DrawAniml(" Анимация");

f.go();

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent ev){

System.exit(0); 

}

}); 

}

Эффект мерцания, переливы цвета, затемнение и прочие эффекты, получающиеся заменой отдельных пикселов изображения, удобно создавать с помощью класса Memoryimagesource. Методы newPixeis() этого класса вызывают немедленную перерисовку изображения даже без обращения к методу repaint(), если перед этим выполнен метод setAnimated(true). Чаще всего применяются два метода:

newPixels(int x, int y, int width, int height) — получателю посылается указанный аргументами прямоугольный фрагмент изображения;

 nevPixels() — получателю посылается все изображение.

В листинге 15.13 показано применение этого способа. Квадрат, выведенный на экран, переливается разными цветами.

Листинг 15.13.

Анимация с помощью MemorylmageSource

import Java.awt.*;

import java.awt.event.*;

import java.awt.image.*;

class InMemory extends Frame{

private int w = 100, h = 100, count; 

private int[] pix = new int[w * h]; 

private Image img; 

MemorylmageSource mis; 

InMemory(String s){ super(s); 

int i = 0; 

for(int у = 0; у < h; y++){

int red = 255 * у / (h - 1); 

for(int x = 0; x < w; x++){

int green = 25$ * x / (w - 1);

pix[i++] = (255 « 24}|(red << 16)|(green << 8)

|

128; 

}

}

mis = new MemorylmageSource(w, h, pix, 0, w);

// Задаем возможность анимации




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