Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Растровые изображения в аплете

Растровые изображения в автономном приложении
Класс MediaTracker
Класс ImageObserver
Создание изображений
Фильтр RGBImageFilter
Фильтр CropImageFilter
Полупрозрачные изображения
Класс PixelGrabber
Внеэкранное изображение

Назад Вперед

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).

pic1.gif (25051 bytes)

Рис. 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);

Назад Вперед

[Назад]