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