русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Класс MediaTracker


Дата добавления: 2015-06-12; просмотров: 705; Нарушение авторских прав


Многие из ранних разработчиков Java находили интерфейс ImageObserver слишком сложным для понимания и управления загрузкой множественных изображений. Сообщество разработчиков просило более простое решение, которое позволило бы программистам загружать все их изображения синхронно, не беспокоясь относительно imageUpdate(). В ответ на это Sun Microsystems в последующем выпуске JDK добавила к java.awt класс с именем MediaTracker. MediaTracker создает объект, который будет параллельно проверять состояние произвольного числа изображений.

Для использования MediaTracker вы создаете его новый экземпляр и применяете его метод addImage(), чтобы прослеживать состояние загрузки изображения. Общий формат addimage():

void addImage (Image imgObj, int imgID)

void addImage(Image imgObj, int imgID, int width, int height)

Здесь imgObj — прослеживаемое изображение. Его идентификационный номер передается в imgID. ID (идентификатор) номера не должны быть уникальными. Вы можете использовать тот же номер с несколькими изображениями, как средство их идентификации в качестве части группы. Во второй форме параметры width и height определяют размеры отображаемого объекта.

Как только вы зарегистрировали изображение, можете проверить, загружено ли оно, или можете ждать, когда оно полностью загрузится. Для проверки состояния изображения вызывают метод checkID(), одна из версий, которого, имеет формат:

boolean checkID(int imgID)

Здесь imgID определяет ID изображения, которое вы хотите проверить. Метод возвращает true, если все изображения, которые имеют указанный идентификатор, были загружены (или, когда загрузка закончилась с ошибкой или пользователь выполнил аварийное завершение работы). Иначе он возвращает false. Чтобы увидеть, были ли все прослеживаемые изображения загружены, можно использовать метод checkAll().



MediaTracker следует применять при загрузке группы изображений. Пока все изображения не разгружены, вы можете развлечь пользователя, отобразив на экране что-нибудь еще (пока прибывают загружаемые изображения).

Далее следует пример, который загружает слайд-показ с семью изображениями и отображает прогресс-полоску процесса загрузки:

Программа 135. Показ слайдов

/*

<applet code = "TrackedImageLoad" width = 300 height = 400>

<param name="img"

value = "vincent + leonardo + matisse + picasso

+ renoir + seurat + vermeer">

</applet>

*/

import java.util.*;

import java.applet.*;

import java.awt.*;

public class TrackedImageLoad extends Applet

implements Runnable {

MediaTracker tracker;

int tracked;

int frame_rate = 5;

int current_img = 0;

Thread motor;

static final int MAXIMAGES = 10;

Image img[] = new Image[MAXIMAGES];

String name[] = new String[MAXIMAGES];

boolean stopFlag;

public void init() {

tracker = new MediaTracker(this);

StringTokenizer st =

new StringTokenizer(getParameter("img"), "+");

while (st.hasMoreTokens() && tracked <= MAXIMAGES) {

name[tracked] = st.nextToken();

img[tracked] = getImage(getDocumentBase(),

name[tracked] + ".jpg");

tracker.addImage(img[tracked], tracked);

tracked++;

}

}

public void paint(Graphics g) {

String loaded = "";

int donecount = 0;

for(int i = 0; i < tracked; i++) {

if (tracker.checkID(i, true)) {

donecount++;

loaded += name[i] + " ";

}

}

Dimension d = getSize();

int w = d.width;

int h = d.height;

if (donecount == tracked) {

frame_rate = 1;

Image i = img[current_img++];

int iw = i.getWidth(null);

int ih = i.getHeight(null);

g.drawImage(i, (w - iw)/2, (h - ih)/2, null);

if (current_img >= tracked)

current_img = 0;

} else {

int x = w * donecount; // отслежено

g.setColor(Color.black);

g.fillRect(0, h/3, x, 16);

g.setColor(Color.white);

g.fillRect(x, h/3, w - x, 16);

g.setColor(Color.black);

g.drawString(loaded, 10, h/2);

}

}

public void start() {

motor = new Thread(this);

stopFlag = false;

motor.start() ;

}

public void stop() {

stopFlag = true;

}

public void run() {

motor.setPriority(Thread.MIN_PRIORITY);

while (true) {

repaint();

try {

Thread.sleep(1000 / frame_rate);

}

catch (InterruptedException e)

{ }

if(stopFlag)

return;

}

}

}

Для запуска данного апплета создадим следующий html-файл:

<applet code = "TrackedImageLoad" width = 300 height = 400>

<param name = "img"

value = "vincent+leonardo+matisse+picasso+renoir+seurat+vermeer">

</applet>

В папке с class - файлом должны быть файлы с картинками, имене которых указаны в html-файле: vincent.jpg, leonardo.jpg, matisse.jpg, picasso.jpg, renoir.jpg, seurat.jpg, vermeer.jpg.

Представленный пример создает новый MediaTracker в методе init() и затем добавляет каждое из именованных прослеживаемых изображений с помощью метода addImage(). В методе paint() на очередном из прослеживаемых изображений вызывается checkID(). Если все изображения загружены, они отображаются. Если нет, показывается простая прогресс-полоска числа загруженных изображений с именами полностью загруженных (отображаемых ниже этой полоски). На рис.4 показано окно апплета с одним из портретов.

Рис. 4. Один из слайдов, показываемых апплетом



<== предыдущая лекция | следующая лекция ==>
Двойная буферизация | Производитель изображений MemorylmageSource


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.293 сек.