Назад
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.
Рис. 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);
Назад |