| | | Creating and Drawing Images |
Creating and Drawing Images
Often we will want to import images into our program and draw them in
a window. This takes a bit more work, and needs the following extra
code.
- You first need to bring the image from a file into
computer memory. Unfortunately it can take a (relatively) long time
to bring an image from memory (e.g., a jpeg or
gif file), so after we request the item to be brought in,
we may need to wait for it. I suggest you use the following
method that I have written to make sure that the image is fully
loaded before your program proceeds.
/**
* Retrieve an image from file "filename", return the
* Image when it has loaded completely.
* @param the name of the file containing the image
* @return the loaded Image.
*/
private Image getCompletedImage(String fileName) {
Toolkit toolkit = Toolkit.getDefaultToolkit();
Image myImage = toolkit.getImage(fileName);
MediaTracker mediaTracker = new MediaTracker(this);
mediaTracker.addImage(myImage, 0);
try {
mediaTracker.waitForID(0);
} catch (InterruptedException ie) {
System.out.println(ie);
System.exit(1);
}
return myImage;
}
Roughly, the method retrieves a default toolkit that has a method
that will allow reading in an image in a file with name given by
fileName. After the image is fetched with the
getImage method, a MediaTracker object is
created. The image is added to the media tracker object, which
then waits for the loading of the image to be complete. If it
fails to complete then an exception will be thrown and the program
will exit. Otherwise, when the image is done loading, it will be
returned from the method.
You can try to do without the mediaTracker object, but if
you try to access info about the image (e.g., ask its width or
height), you might not get accurate information.
- Using the getCompletedImage method, an image can be
loaded and displayed in a window with the following code:
Image myImage = getCompletedImage("filename.jpg");
g2.drawImage(flowerImage, x, y, this);
where "filename.jpg" should be replaced by the name of the file
holding the image. This code should be placed in a
paint(g) method or in a method called from the
paint method.
| | | Creating and Drawing Images |