Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
You can get away with
Graphics.drawImage(img, x, y, null)
[or similar]. The
ImageObserver
parameter is a callback to inform you of the progress of the draw operation; and is really only useful if you're fetching the Image parameter asynchronously.
To be clearer, if you call
drawImage
with an incompletely loaded Image it will:
return false (immediately)
draw as much of the
Image
as possible (all that is loaded)
and, at some future point, call into the
ImageObserver
when more of the Image is available
Basically, if you're working with in memory
Image
s (either loaded from the file system, or constructed by your program) don't worry about the
ImageObserver
parameter. If you're loading
Image
s across the network and not explicitly waiting for them to load, you'll need to employ an
ImageObserver
to make sure "completely" draw an
Image
.
Image
objects aren't necessarily completely loaded. If
Graphics.drawImage
is invoked on an incomplete image it will draw as much of the image as it can, and then alert the
ImageObserver
(by calling
imageUpdate
) when more of the image is loaded.
The
ImageObserver
can be null, in which case you won't get any notification. This is common if the images are known to be loaded, or if there's already another mechanism doing repaints.
Note that
Component
implements
ImageObserver
, and its
imageUpdate
method will cause a
repaint
on the affected area.
As others have intimated, this API was conceived when it was assumed that the images that would be rendered would be being loaded over the network. When you ask the toolkit to load an image, the assumption is that it is just a shell, and that the bytes required to know its size and pixels are still crawling down the wire.
In this case drawImage may render nothing when it is first called. As the size and pixels become available, the ImageObserver is notified. In the case of
Component implements ImageObserver
, its behaviour is to repaint when the data is available.
Thanks for contributing an answer to Stack Overflow!
-
Please be sure to
answer the question
. Provide details and share your research!
But
avoid
…
-
Asking for help, clarification, or responding to other answers.
-
Making statements based on opinion; back them up with references or personal experience.
To learn more, see our
tips on writing great answers
.