Как работает графика Java.работа drawImage () и какова роль ImageObserver

Как следует использовать drawImage () Java? Я не нахожу документацию JDK очень предстоящей. Например, все подписи drawImage требуют ImageObserver, но документация для этого не очень полезна для новых пользователей.

4 ответов


вы можете уйти с Graphics.drawImage(img, x, y, null) [или подобные]. The ImageObserver параметр является обратным вызовом, чтобы сообщить вам о ходе операции рисования; и действительно полезен, только если вы извлекаете параметр изображения асинхронно.

чтобы быть яснее, если вы позвоните drawImage с неполностью загруженным изображением он будет:

  1. возвращает false (немедленно)
  2. нарисуйте как можно больше Image насколько это возможно (все, что загружено)
  3. и, в какой-то будущая точка, позвоните в ImageObserver когда больше изображения доступно

в основном, если вы работаете с In memory Images (загружается из файловой системы или создается вашей программой) не беспокойтесь о


Image объекты не обязательно полностью загружен. Если Graphics.drawImage вызывается на неполном изображении, он нарисует столько изображения, сколько сможет, а затем предупредит ImageObserver (путем вызова imageUpdate) при загрузке большего количества изображений.

на ImageObserver может быть null, в этом случае вы не получите никаких уведомлений. Это распространено, если известно, что изображения загружаются, или если уже есть другой механизм, выполняющий перерисовки.

отметим, что Component осуществляет ImageObserver, и его imageUpdate метод вызовет repaint на пораженный участок.


на самом деле я использовал drawImage() много раз всегда с


как указывали другие, этот API был задуман, когда предполагалось, что изображения, которые будут отображаться, будут загружаться по сети. Когда вы просите toolkit загрузить изображение, предполагается, что это просто оболочка, и что байты, необходимые для определения ее размера и пикселей, все еще ползут по проводу.

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