Что такое ImageObserver?

При рисовании изображения требуется наблюдатель изображения. Из того, что я понимаю до сих пор, BufferedImage является наблюдателем изображения. Но мой вопрос в том, что определяет зритель изображения и что он делает? Я очень смущен.

Ответ 1

Прежде всего, ImageObserver является интерфейсом. Согласно docs:

Асинхронный интерфейс обновления для получения уведомлений об изображениях по мере создания изображения.

Другими словами, это объектно-ориентированный способ использования изображений, которые могут быть изменены до полного создания. Метод imageUpdate(Image img, int infoflags, int x, int y, int width, int height) вызывается в любое время, когда изображение изменяется. Он возвращает true, если он хочет получать уведомления о дальнейших изменениях и false в противном случае. Этот метод можно использовать для форсирования размера, разрешения, цветов и т.д. Он также дает вам некоторый контроль над ошибками (флаг ERROR). Для получения дополнительной информации см. this.

Наблюдатель также может обрабатывать важную информацию об изображении - например, если мы рисуем изображение на экране и меняем его на большее, пока рендеринг не будет завершен, должен быть способ сообщить все, что мы ' на основе чего изменилось измерение (выделите больше места) и что он должен иметь дело с изменениями. Тот факт, что ImageObserver является асинхронным, чрезвычайно важен в этом случае.

Ответ 2

ImageObserver - это интерфейс, который имеет методы для обработки уведомлений о состоянии загрузки изображения. Он может использовать это для повторного отображения по мере необходимости. JFrame и Applet реализуют интерфейс ImageObserver.

Информировать пользователей о загрузке изображения

  • Интерфейс ImageObserver - позволяет контролировать процесс загрузки, чтобы пользователи могли получать информацию и изображение можно было использовать как можно скорее после его загрузки.

  • Загрузка изображения асинхронно - как узнать, когда изображение готово.

    • Изображение готово - метод getImage() возвращается задолго до того, как что-либо узнается об изображении.

      imageUpdate(Image img, int infoflags, int x, int y, int width, int height)
      
  • Примечание: java.awt.Component реализует ImageObserver, все подклассы делают то же самое!

  • g.drawImage(imge, 0,0, this) - это относится к экземпляру ImageObserver.

  • imageUpdate() - ImageObserver при необходимости. Вы не называете это явно!

    • Если изображение завершено, возвращает false.
    • Если изображение не завершено и нуждается в обновлении, возвращает true.
  • ImageObserver.ALLBITS = 32

  • Различные константы объединяются в аргумент infoflags, который указывает, доступна ли вся информация или нет.

    info flag table

Взгляните на это и объяснение Орейли.