Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab11_Java_Vkazivky_2010_Mutimedia in Java_ Ima....doc
Скачиваний:
3
Добавлен:
17.04.2019
Размер:
863 Кб
Скачать
☆

50, 50, 0, 360, Arc2d.Open));

// Змінюємо колір рисування

big.setColor(getForeground());

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

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

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

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

public void go(){

while(count < 1000){

repaint();

try{

Thread.sleep(10);

}catch(InterruptedException e){}

count++;

}

}

public static void main(String[] args){

DrawAnim f = new DrawAnim(" Анімація");

f.go();

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent ev){

System.exit(0);

}

});

}

}

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

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

  • newPixels() — отримувачу посилається все зображення.

В лістинзі 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;

MemoryImageSource mis;

InMemory(String s){ super(s);

int i = 0;

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

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

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

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

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

}

}

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

// Задаємо можливість анімації

mis.setAnimated(true);

img = createImage(mis);

setSize(350, 300);

setVisible(true);

}

public void paint(Graphics gr){

gr.drawImage(img, 10, 30, this);

}

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

public void go(){

while (count < 100){

int i = 0;

// Змінюємо масив пікселів по деякому закону

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

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

pix[i++] = (255 << 24)|(255 + 8 * count << 16)| (8*count <<8)| 255 + 8 * count;

// Повідомляємо споживача про зміну

mis.newPixels();

try{

Thread.sleep(100);

}catch(InterruptedException e){}

count++;

}

}

public static void main(String[] args){

InMemory f= new InMemory(" Зображення в памяті");

f.go();

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent ev){ System.exit(0); }

});

}

}

Ось і всі засоби для анімації, решта — їх вміле застосування. Комбінуючи розглянуті способи, можна добитися цікавих эфектів. В документації SUN J2SDK, в каталогах demo\applets і demo\jfc\Java2D \src, наведено багато прикладів аплетів і додатків з анімацією.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]