Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Теоретические сведения. Видеоклип из графических изображений проще всего создать

Читайте также:
  1. Архитектура ЭВМ: определение, основные сведения. Принцип открытой архитектуры.
  2. Вопрос 2. 2. Модель выбора оптимальной политики: теоретические предпосылки построения и экономико-математическая интерпретация. Определенность политики. Правило Тинбергена.
  3. ГЛАВА 1. ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ИОНООБМЕННЫХ ПРОЦЕССОВ
  4. Глава 1. Теоретические основы проблемы диагностики агрессивности
  5. Кейнсианская революция»: теоретические и исторические предпосылки. Теоретическая система Дж.М. Кейнса
  6. Краткие теоретические сведения
  7. Краткие теоретические сведения

Видеоклип из графических изображений проще всего создать, загрузив их в массив, элементы которого имеют тип image, а затем последовательно ото­бразить в окне апплета методом drawimage (). По достижении конца списка все начинается с начала. Такой подход к созданию видеоклипов реализует ту же идеологию, что применялась в мультипликации, а именно, через равные промежутки времени показывать на экране новые образы и тем самым соз­дать иллюзию движения для зрителей.

Графическими изображениями являются фрагменты цифры, которые находятся в файлах d0.gif,..., d9.gif. Таким образом, дан­ный код является примером своеобразного счетчика.

Обратите внимание на то, как каждый кадр подсоединяется к объекту клас­са MediaTracker методом addimage (), который имеет следующий синтаксис:

public void addimage{Image image, int id)

где image — объект типа image, который связывается с объектом MediaTracker, a id — целое число, его идентифицирующее.

На самом деле метод getimage () не загружает файл, а только устанавливает связь между объектом класса image и графическим файлом. Объект класса MediaTracker предоставляет средства отслеживания загрузки графических и звуковых файлов. Он контролирует, загружается ли объект или загрузка за­вершена, а если завершена, то не произошла ли какая-нибудь ошибка. Ко­гда изображения подключены к объекту MediaTracker, программа заставляет их загружаться методом waitForAll (). Этот метод не возвращает управление до тех пор, пока от всех изображений не поступит уведомление об их ус­пешной или неуспешной загрузке. После загрузки всех изображений цикл работает корректно.

Метод waitForAll (), задерживая выполнение программы до полной загрузки всех изображений из указанных файлов, имеет один подводный камень. Если по каким-то причинам изображения не могут быть загружены, этот метод все равно будет ждать вечно их загрузки, что приведет к тривиальному зависанию программы. В таких ситуациях, когда есть сомнение по поводу успешной за­грузки изображений, надо использовать другой вариант метода waitForAll (). А именно,

public boolean waitForAll(long ms)

где ms — задает максимальное число миллисекунд, которое метод отводит на успешную загрузку изображений.

 

Листинг файла CountImage

import java.awt.*;

import java.applet.*;

 

public class CountImages extends Applet implements Runnable

{

Thread thread=null;

int sleep=1000;

Image []image;

int count=0;

int numimage=10;

String fileName="d";

MediaTracker tracker;

 

 

/** Initialization method that will be called after the applet is loaded

* into the browser.

*/

public void init() {

setBackground(Color.BLACK);

tracker= new MediaTracker(this);

images=new Image[numImage];

showStatus("Пожалуйста немного подождите. Загрузка изображений...");

for(int i=o; i<numImage; ++i)

{

String nm="images/"+fileName+i+".gif";

images[i]=getImage(getDocumentBase(),nm);

tracker.addImage(images[i],0);

}

try

{

tracker.waitForAll();

}

catch(InterruptedException e)

{

}

}

public void paint (Graphics g)

{

if(count = =numImages) count=0;

g.drawImage(images[count++],0,0,this);

}

public void start()

{

if(thread= =null)

{

thread=new Thread(this);

thread.start();

}

}

public void stop()

{

if(thread!=null)

{

thread=null;

}

}

public void run()

{

while(thread!=null)

{

try

{

thread.sleep(sleep);

}

catch(InterruptedException e)

{

}

repaint();

}

}

}

 


Дата добавления: 2015-10-29; просмотров: 86 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Дістемелік нұсқау| Работа 1. Обработка строк

mybiblioteka.su - 2015-2024 год. (0.008 сек.)