Java-апплет обычно используется для отображения изображений, хранящихся в файлах GIF. Загружать изображения GIF в Java-апплет очень просто. При использовании файлов изображений в апплете вам необходимо определить объект Image. Большинство Java-апплетов используют файлы изображений в формате GIF или JPEG. Апплет использует метод getImage для связи файла изображения с объектом Image.
Метод drawImage класса Graphics используется для отображения объектов Image. Чтобы улучшить эффект отображения изображений, многие апплеты используют технологию двойной буферизации: сначала загружают изображение в память, а затем отображают его на экране.
Апплет может определить, какая часть изображения уже находится в памяти, с помощью метода imageUpdate.
Загрузка изображения
Java рассматривает изображения как объекты Image, поэтому при загрузке изображения необходимо сначала определить объект Image в следующем формате:
Image image,
а затем использовать метод getImage для соединения объекта Image и файла изображения:
image=getImage(getCodeBase(),"ImageFileName.GIF");
Метод getImage имеет два параметра. Первый параметр — это вызов метода getCodeBase, который возвращает URL-адрес апплета, например www.sun.com/Applet . Второй параметр указывает имя файла изображения для загрузки по URL-адресу. Если файл изображения расположен в подкаталоге апплета, путь к соответствующему каталогу должен быть включен в имя файла.
После загрузки изображения с помощью метода getImage апплет может использовать метод drawImage класса Graphics для отображения изображения. Форма выглядит следующим образом:
g.drawImage(Picture,x,y,this
Параметры метода drayImage
;укажите изображение, которое будет отображаться. Координаты x и y верхнего левого угла изображения и this.
Цель четвертого параметра — указать объект, реализующий интерфейс ImageObServer, то есть объект, определяющий метод imageUpdate (этот метод обсуждается позже).
Отображение изображения (ShowImage.java)
//Список исходных программ
импортировать java.awt.*;
импортировать java.applet.*;
публичный класс ShowImage расширяет апплет
Изображение picure //Определение переменных-членов типа Image;
публичная недействительная инициализация()
{
image=getImage(getCodeBase(),"Image.gif"); //Загрузить изображение
}
Публичная краска пустоты (Графика г)
{
g.drawImage(picture,0,0,this); //Отображение изображения
}
}
По этой причине утверждения об апплете в файле HTML следующие:
<HTML>
<TITLE>Показать апплет изображения</TITLE>
<АППЛЕТ
CODE="ShowImage.class" //Имя файла класса — ShowImage.class
ШИРИНА=600
ВЫСОТА=400>
</АППЛЕТ>
</HTML>
При запуске апплета после компиляции образ создается не за один раз. Это связано с тем, что программа не загружает и не отображает изображение полностью до возврата метода drawImage. Напротив, метод drawImage создает поток, который выполняется одновременно с исходным потоком выполнения апплета. Он загружается и отображается одновременно, создавая таким образом разрыв. Для того, чтобы улучшить эффект отображения. Многие апплеты используют технологию двойной буферизации изображения, то есть изображение полностью загружается в память, а затем отображается на экране, так что изображение можно отобразить за один раз.
Изображения с двойной буферизацией.
Для улучшения эффекта отображения изображений следует использовать технологию двойной буферизации. Изображение сначала загружается в память, а затем отображается в окне апплета.
Пример использования технологии двойной буферизации изображений (BackgroundImage.java)
//Список исходных программ
импортировать java.awt.*;
импортировать java.applet.*;
публичный класс BackgroundImage расширяет апплет //Наследовать апплет
{
Изображение изображения;
Логическое значение ImageLoaded=false;
публичная недействительная инициализация()
{
image=getImage(getCodeBase(),"Image.gif"); //Загрузка изображения Image offScreenImage=createImage(size().width,size().height);
//Создаем объект Graphics с помощью метода createImage offScreenGC=offScreenImage.getGraphics() //Получаем объект Graphics offScreenGC.drawImage(picture,0,0,this); //Отображаем изображение за кадром};
Публичная краска пустоты (Графика г)
{
если (изображение загружено)
{
g.drawImage(picture,0,0,null); //Отображение изображения, четвертый параметр имеет значение null, а не этот;
showStatus("Готово");
}
еще
showStatus("Загрузка изображения");
}
public boolean imageUpdate(Image img,int infoflags,int x,int y,int w,int h)
{
если (информационные флаги = = ВСЕБИТЫ)
{
imageLoaded = правда;
перекрасить();
вернуть ложь;
}
еще
вернуть истину;
}
}
Анализ метода init апплета показывает, что метод сначала определяет объект Image с именем offScreenImage и присваивает ему возвращаемое значение метода createImage, а затем создает объект Graphics с именем offScreenGC и назначает ему графическую среду - неэкранную среду. изображение будет создано им. Поскольку здесь рисуется закадровое изображение, в окне апплета изображение отображаться не будет.
Всякий раз, когда апплет вызывает метод drawImage, drawImage создает поток, вызывающий метод imageUpdate. Апплет может определить, какая часть изображения загружена в память с помощью метода imageUpdate. Поток, созданный drawImage, продолжает вызывать метод imageUpdate до тех пор, пока метод не вернет false.
Второй параметр infoflags метода imageUpdate позволяет апплету узнать, как изображение загружается в память. Этот параметр равен ImageLoaded и имеет значение true, а метод repaint вызывается для перерисовки окна апплета. Этот метод в конечном итоге возвращает false, чтобы предотвратить повторный вызов метода imageUpdate потоком выполнения drawImage.
Работой апплета в методе рисования управляет переменная ImageLoaded. Когда эта переменная становится истинной, метод рисования вызывает метод drawImage для отображения изображения. Когда метод рисования вызывает метод drawImage, он принимает значение null в качестве четвертого параметра, что не позволяет drawImage вызвать метод imageUpdate. Поскольку изображение уже загружено в память, отображение изображения в окне апплета может быть завершено за один раз.