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

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

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

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

Назад

9.10. Внеэкранное изображение

Создав изображение в оперативной памяти методом createImage вы впоследствии сможете получить для него внеэкранный контекст отображения. С помощью такого констекста нетрудно подготовить изображение в памяти, рисуя на нем как в обычном окне, а затем методом drawImage вывести готовое внеэкранное изображение в окно аплета или автономного приложения. Данный пример демонстрирует использование описанной методики.

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Демонстрация
(ваш браузер должен уметь работать с аплетами Java JDK 1.1)

Немного теории

Внеэкранные изображения часто применяются в анимационных приложениях для устранения мерцания. При этом изображение готовится в оперативной памяти в несколько приемов, а затем рисуется в окне приложения за один вызов метода drawImage.

Как подготовить внеэкранное изображение?

Для создания такого изображения следует воспользоваться методом createImage, как это показано ниже:

Image img;
img = createImage(200, 200);

Здесь создается пустое изображение размером 200 x 200 пикселов.

Далее нужно получить так называемый внеэкранный контекст отображения, связанный с этим изображением:

Graphics gOff = img.getGraphics();

Вы можете рисовать в таком контексте, как в обычном.

Когда внеэкранное изображение будет подготовлено, его можно нарисовать в окне приложения методом drawImage.

Описание примера

Наш аплет готовит внеэкранное изображение и выводит его в своем окне, как это показано на рис. 1.

pic1.gif (8881 bytes)

Рис. 1. Готовое внеэкранное изображение нарисовано в окне аплета

Рассмотрим исходный текст аплета.

Главный класс аплета MemoryImg

В главном классе аплета, созданном на базе класса Applet, мы определили поля img и img1 класса Image:

import java.awt.*;
import java.applet.*;
import java.awt.image.*;

public class MemoryImg extends Applet
{
  Image img;
  Image img1;
  . . .
}

Перове из них служит для хранения обычного изображения, загруженного из файла с именем img1.jpg, а второе - хранит ссылку на внеэкранное изображение, созданное нашим аплетом.

Метод init

Первым делом при инициализации метод init создает внеэкранное изображение размером 200 x 200 пикселов:

img = createImage(200, 200);

Далее он загружает изображение из файла img1.jpg:

img1 = getImage(getCodeBase(), "img1.jpg");

Окончание этого процесса ожидается с помощью класса MediaTracker:

MediaTracker mt = new MediaTracker(this);
mt.addImage(img1, 0);  
try
{
  mt.waitForAll();
}
catch(InterruptedException ie)
{
  return;
}
Метод paint

Когда окно аплета перерисовывается, метод paint получает внеэкранный контекст отображения, связанный с изображением img:

Graphics gOff = img.getGraphics();

Далее он выполняет в этом контексте несколько обычных операций рисования - закрашивание всего изображения желтым цветом, рисование красной строки и рисование растрового изображения img1:

gOff.setColor(Color.yellow);
gOff.fillRect(0, 0, 200, 200);    
    
gOff.setColor(Color.red);
gOff.drawString("Off-screen image", 10, 30);
    
gOff.drawImage(img1, 10, 80, this);

На последнем шаге готовое внеэкранное изображение рисуется в окне аплета методом drawImage:

g.drawImage(img, 0, 0, this);

Назад

[Назад]