Главная Интернет WEB-учебник Java в примерах


Интернет клуб

Новая страница
Описание html
Javascript
Java в примерах

Что такое JAVA?
Первое приложение на JAVA
Первый апплет на JAVA
Управление шрифтами
Строковые переменные
Работа с массивами
Работа с графикой
Операции с мышкой
Операции с клавиатурой
Структура апплета
Работа с потоками
Передача параметров в апплет
Загрузка изображения в апплет
Контроль за ходом загрузки изображения
Двойная буферизация
Создание изображения из массива данных
Корректировка изображения

Полезные сайты
Задайте вопрос









Web-учебник. Раздел 4. Java в примерах.

Контроль за ходом загрузки изображения





Для контроля за ходом получения изображения и, следовательно, для улучшения качества вывода изображения, используется метод imageUpdate() Метод имеет следующий формат:
boolean imageUpdate(Image обьект, флаги, XBeg, YBeg, width, length);

Здесь обьект - загружаемое изображение,
значения параметра флаги приведены в следующей таблице:

Флаг Значение
WIDTH Ширина изображения
HEIGHT Высота изображения
PROPERTIES Свойства изображения можно
получить с помощью метода
imgObj.getProperties()
SOMEBITS Получен следующий фрагмент
изображения. Параметры XBeg,
YBeg, width, length определяют
содержащий его прямоугольник
FRAMEBITS Получен полный кадр, являющийся
частью многокадрового изображения
ALLBITS Получено все изображение
ERROR Произошла ошибка при
выводе изображения -
изображение неполное и не
может быть выведено
ABORT Передача изображения прервана
до ее завершения.

Рассмотрим следующее использование метода imageUpdate() . Он находится в состоянии ожидания до полной загрузки изображения, а затем выводится на экран за один раз.
Обратим внимание на метод imageUpdate() .
Если флаг flags имеет состояние ALLBITS (то есть соответствующий бит установлен в 1), что означает, завершение выгрузки изображения, то вызывается метод repaint() для вывода уже подготовленного изображения на экран. Обратите внимание, что установлено первоначальное значение error = false .
В противном случае, когда выгрузка изображения еще не завершена, проверяем установку флагов ABORT и ERROR . Если флажок установлен хотя бы в одно из этих значений, устанавливаем значение error = true и также обращаемся к методу repaint() .
Функция imageUpdate() возвращает значение true , если установлен хотя бы один из флажков : ALLBITS, ABORT, ERROR .
Метод repaint() обращается к методу paint() .
Рассмотрим метод paint() . Если логическая переменная error установлена в true , то есть существуют проблемы с загрузкой изображения, то мы выводим в окно апплета сообщение об ошибке желтого цвета на красном фоне. В противном случае мы выводим требуемое изображение.

//------------------------------------------------------------  
//   Program :  MySecondImage
//------------------------------------------------------------  
//   Author  :  Katz Yakov 
//------------------------------------------------------------  
//   Date    :  20/01/98
//------------------------------------------------------------  
import java.awt.*;
import java.applet.*;
//------------------------------------------------------------  
// Создаем апплет MySecondImage
public  class  MySecondImage  extends  Applet{
   // Обьявляем переменную изображения класса Image
   Image   picture;
   // Переменная error сообщает: произошла ли ошибка
   // при загрузке изображения
   boolean error = false;
   // Переменная для хранения имени файла изображения
   String  imagename = new String();
   // Переопределяем метод init()
   public void init() {
      // Получаем имя файла изображения из HTML файла
      imagename = getParameter("img");
      // Загружаем требуемое изображение
      picture = getImage(getCodeBase(),imagename);
   }
   // Определяем метод вывода изображения в окно апплета
   public void paint(Graphics  gr) {
      // Произошла ли ошибка загрузки изображения
      if (error) {
         // Вывод сообщения об ошибке
         gr.setColor(Color.maroon);
         gr.fillRect(0, 0, 220, 80);
         gr.setColor(Color.yellow);
         gr.drawString("Image not found: " + imagename, 20, 40);
      }
      else {
         // Вывод изображения в окно апплета
         gr.drawImage(picture, 0, 0, this) ;
      }
   }
   // Переопределяем imageUpdate
   public boolean imageUpdate(Image img, int flags,
                  int x, int y, int w, int h) {
      // Проверяем, акончилась ли выгрузка изображения
      if ((flags & ALLBITS) != 0) {
         repaint();
      }
      else {
         // Проверяем, не произошло ли ошибки
         if ((flags & (ABORT|ERROR)) != 0) {
            error = true;
            repaint();
         }
      }
      // Формируем код возврата из метода
      return  (flags & (ALLBITS|ABORT|ERROR)) == 0;
   }
}

Запишем команду вызова апплета, использующую существующий файл SHISHKIN.JPG .

<applet code="MySecondImage" width=300 height=430>
<param name=img value=SHISHKIN.JPG>
</applet>

Выполним этот апплет: (В Netscape Вы этот апплет не увидите т. к. здесь передается параметр. Sorry).

Затем запишем команду вызова апплета, использующую несуществующий файл SEROV.JPG .

<applet code="MySecondImage" width=300 height=430>
<param name=img value=SEROV.JPG>
</applet>
Выполним этот апплет:







  ©1996-2007   Megapolis Org   E-mail:   info@megapolis.org