Как работает графика Java.работа drawImage () и какова роль ImageObserver
Как следует использовать drawImage () Java? Я не нахожу документацию JDK очень предстоящей. Например, все подписи drawImage требуют ImageObserver, но документация для этого не очень полезна для новых пользователей.
4 ответов
вы можете уйти с Graphics.drawImage(img, x, y, null)
[или подобные]. The ImageObserver
параметр является обратным вызовом, чтобы сообщить вам о ходе операции рисования; и действительно полезен, только если вы извлекаете параметр изображения асинхронно.
чтобы быть яснее, если вы позвоните drawImage
с неполностью загруженным изображением он будет:
- возвращает false (немедленно)
- нарисуйте как можно больше
Image
насколько это возможно (все, что загружено) - и, в какой-то будущая точка, позвоните в
ImageObserver
когда больше изображения доступно
в основном, если вы работаете с In memory Image
s (загружается из файловой системы или создается вашей программой) не беспокойтесь о
Image
объекты не обязательно полностью загружен. Если Graphics.drawImage
вызывается на неполном изображении, он нарисует столько изображения, сколько сможет, а затем предупредит ImageObserver
(путем вызова imageUpdate
) при загрузке большего количества изображений.
на ImageObserver
может быть null, в этом случае вы не получите никаких уведомлений. Это распространено, если известно, что изображения загружаются, или если уже есть другой механизм, выполняющий перерисовки.
отметим, что Component
осуществляет ImageObserver
, и его imageUpdate
метод вызовет repaint
на пораженный участок.
как указывали другие, этот API был задуман, когда предполагалось, что изображения, которые будут отображаться, будут загружаться по сети. Когда вы просите toolkit загрузить изображение, предполагается, что это просто оболочка, и что байты, необходимые для определения ее размера и пикселей, все еще ползут по проводу.
в этом случае drawImage может ничего не отображать при первом вызове. Как размер и пиксели становятся доступными, ImageObserver уведомляется. В случай Component implements ImageObserver
, его поведение заключается в перерисовке, когда данные доступны.