AWT可以很简单的加载两种格式的图像:GIF和JPEG。Applet和Toolkit类提供的getImage()方法可以加载这两种格式的图片。
Toolkit的getImage()方法:
Toolkit toolkit = Toolkit.getDefaultToolkit();
Image image1 = toolkit.getImage("imageFile.gif");
Image image2 = toolkit.getImage( new URL("http://java.sun.com/graphics/people.gif")
Applet子类的getImage()方法:
Image image1 = getImage(getCodeBase(), "imageFile.gif");
Image image2 = getImage(getDocumentBase(), "anImageFile.jpeg");
Image image3 = getImage( new URL("http://java.sun.com/graphics/people.gif"));
注意: Applet和Toolkit类的getImage()方法是立即返回,因此不必等待图像加载完而可以直接执行的程序中其它的操作。虽然这可以提高性能,但是此时如果直接用drawImage()方法显示图片的话,就是造成图像加载等待现象,针对这个问题,我们可以通过使用java.awt.MediaTracker类跟踪图像的加载图像,加载完成后再进行显示。
(1)在applet的子类中创建一个MediaTracker实例
MediaTracker mt = new MediaTracker(Component comp)
(2)此方法要求指定跟踪的对象,我们可以设置为applet。
MediaTracker mt = new MediaTracker(this) //告诉MediaTracker跟踪此applet组件。
(3)同时将指定的图像加载到媒体跟踪器的列表中
Mt.addImage(img,id);//将图片编号为id后加载到媒体跟踪器列表上。
(4)使用MediaTracker的waitForID(id)或者waitForAll()方法将MediaTracker列表上的图像加载到内存,直到加载完成后才进行下一步操作。
(5)可以使用checkID(id,true)和checkAll(true)开始检查指定的编号为id图像或则所有还未被加载的图像,将其加载到内存中。
通过Component的paint()方法的Graphics对象可以显示图像。在Graphics对象上调用一个drawImage()方法。
g.drawImage(myImage, 0, 0, this); //在浏览器的applet小应用程序的左上角(0, 0)坐标上以原始大小显示myImage图像。
g.drawImage(myImage, 90, 0, 300, 60, this); /在/浏览器的applet小应用程序的左上角(90, 0)坐标上以宽缩放到300像素,高缩放到60像素的myImage图像。
实现双缓冲机制主要用到public Image createImage(int width, int height)方法,它是java.awt.component类中的方法,目的是创建一个内存图像缓冲区,存储指定宽度和高度的图像,它采用的双缓冲机制,支持屏幕外绘制的图像。这里所说的双缓冲是指(本地或者网络)----(内存)-----(屏幕)。可在屏幕外绘制其实就是指在缓冲内存中绘制。将一幅幅的图像绘制到内存缓冲区后,通过调用g.drawImage(img, x, y, this)将缓冲区中的图像一次性的加载到屏幕中去。
首先:在applet子类中创建内存图像缓冲区
Image imgbuf = createImage(600,400)
其次:构建内存图像缓冲区的画笔(图形上下文)
Graphic gbuf = imgbuf.getGraphics();
然后:将图片绘制到内存图像缓冲区(一般放在applet子类的start()方法中)
gbuf. drawImage(img, 0, 0, this); //此img为本地或者网络图片
最后:将缓冲区中的图像一次性的加载到屏幕中(一般在applet子类paint(Graphics g)方法中)
g.drawImage(imgbuf, 0, 0, this); //此imgbuf为内存缓冲区的图片
重写public void update(Graphics g)方法,方法中调用paint(g)方法即可。