Назад
Вперед
9.1. Растровые изображения в аплете
Пример показывает простейший способ рисования
растрового изображения в окне аплета.
Исходный текст примера
Архив проекта для Java WorkShop 2.0
Демонстрация
(ваш браузер должен уметь работать с аплетами
Java JDK 1.1)
Немного теории
Для аплета загрузка растрового изображения из
файла выполняется с помощью метода getImage,
определенного в классе Applet:
public Image getImage(URL url);
public Image getImage(URL url, String name);
Первый вариант метода предполагает
использование только одного параметра - адреса URL
файла графического изображения. Второй
позволяет дополнительно указать расположение
файла изображения относительно адреса URL.
Если аплет желает загрузить изображение,
расположенное в том же каталоге, что и его
собственный байт-код, это можно сделать
следующим образом:
img = getImage(getCodeBase(), "cd.gif");
Заметим, что на самом деле метод getImage вовсе не
загружает изображение через сеть, а только
создает объект класса Image. Реальная загрузка
файла растрового изображения будет выполняться
методом рисования drawImage, который определен в
классе Graphics.
Существует четыре варианта этого метода:
public abstract boolean
drawImage(Image img, int x, int y,
ImageObserver observer);
public abstract boolean
drawImage(Image img, int x, int y,
Color bgcolor, ImageObserver observer);
public abstract boolean
drawImage(Image img, int x, int y,
int width, int height,
ImageObserver observer);
public abstract boolean
drawImage(Image img, int x, int y,
int width, int height,
Color bgcolor, ImageObserver observer);
В качестве первого параметра любому варианту
метода передается ссылка на объект класса Image,
полученный ранее с помощью метода getImage.
Параметры x и y задают координаты верхнего
левого угла прямоугольной области, внутри
которой будет нарисовано изображение.
Параметр bgcolor задает цвет фона, на котором будет
нарисовано изображение.
Если для рисования выбраны варианты метода
drawImage с параметрами width и height, изображение будет
нарисовано с масштабированием. При этом
указанные параметры будут определять,
соответственно, ширину и высоту изображения.
Параметр observer представляет собой ссылку на
объект класса ImageObserver, который получит извещение
при загрузке изображения. Обычно в качестве
такого объекта используется сам аплет, поэтому
данный параметр указывается как this.
Метод drawImage запускает процесс загрузки и
рисования изображения, а затем, не дожидаясь его
завершения, возвращает управление. Так как
загрузка файла изображения по сети может отнять
немало времени, ее имеет смысл выполнять
асинхронно в отдельном потоке.
Описание примера
Наш аплет SimpleImgView рисует в своем окне растровое
графическое изображение из файла cdroms.jpg (рис. 1).
Рис. 1. Окно аплета SimpleImgView
Файл cdroms.jpg должен находиться в том же каталоге,
что и файл байт-кода аплета SimpleImgView.class.
Рассмотрим исходный текст аплета.
Главный класс аплета
Главный класс нашего аплета реализован на базе
класса Applet:
import java.awt.*;
import java.applet.*;
public class SimpleImgView extends Applet
{
. . .
}
В нем мы определили два поля и несколько
методов.
Поле img хранит ссылку на объект класса Image,
созданный из файла cdroms.jpg:
Image img;
Поле dm класса Dimension предназначено для хранения
размеров окна аплета:
Dimension dm;
Метод init класса SimpleImgView
Метод init получает управление при инициализации
аплета. Он выполняет две функции - создание
объекта класса Image и определение размеров окна
аплета:
public void init()
{
img = getImage(getCodeBase(), "cdroms.jpg");
dm = getSize();
}
Первая задача решается с применением метода
getCodeBase, возвращающего адрес URL каталога с
байт-кодом аплета. Именно в этот каталог
необходимо поместить файл cdroms.jpg.
Метод getImage, возвращающий ссылку на созданный
объект класса Image, определен в классе Applet и потому
пригоден только для аплетов. В следующем примере
этого раздела нашей библиотеки примеров мы
покажем, как задача создания объекта класса Image
на базе файла решается в автономных приложениях
Java.
Обратим также ваше внимание на то, что метод
getImage может работать только с файлами формата JPG и
GIF.
Формат JPG предполагает сжатие графических
данных с потерей качества. Обычно он применяется
для хранения фотографий. Что же касается формата
GIF, то использованный в нем алгоритм сжатия не
снижает качество изображения. Поэтому этот
формат пригоден для хранения рисунков, копий
экрана и других аналогичных изображений.
Метод paint класса SimpleImgView
Метод paint вызывается когда аплет
перерисовывает свое окно.
Наша реализация этого метода рисует растровое
изображение в левом верхнем углу аплета,
используя масштабирование:
g.drawImage(img, 0, 0,
dm.width, dm.height, this);
В результате масштабирования рисунок
растягивается (или сжимается) таким образом,
чтобы он занимал всю поверхность окна.
Когда вы будете экспериментировать с исходным
текстом аплета, попробуйте заменить только что
приведенные строки на следующую строку:
g.drawImage(img, 0, 0, this);
Изображение будет нарисовано без
масштабирования.
После рисования изображения метод paint обводит
окно аплета тонкой рамкой и надписывает в вернем
левом углу этого окна имя файла растрового
изображения:
g.drawRect(0, 0,
dm.width - 1, dm.height - 1);
g.drawString("CDROMS.JPG", 10, 30);
Назад Вперед |