При рисовании изображения требуется наблюдатель изображения. Из того, что я понимаю до сих пор, BufferedImage является наблюдателем изображения. Но мой вопрос в том, что определяет зритель изображения и что он делает? Я очень смущен.
Что такое ImageObserver?
Ответ 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
, который указывает, доступна ли вся информация или нет.
Взгляните на это и объяснение Орейли.