Читайте также:
|
|
Видеоклип из графических изображений проще всего создать, загрузив их в массив, элементы которого имеют тип 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. Обработка строк |