Applet中绘制图像的问题总结

Applet中绘制图像的问题总结

加载图像

AWT可以很简单的加载两种格式的图像:GIFJPEGAppletToolkit类提供的getImage()方法可以加载这两种格式的图片。

    ToolkitgetImage()方法:

           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"));

       注意: AppletToolkit类的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(imgid)//将图片编号为id后加载到媒体跟踪器列表上。

4)使用MediaTrackerwaitForIDid)或者waitForAll()方法将MediaTracker列表上的图像加载到内存,直到加载完成后才进行下一步操作。

5)可以使用checkIDidtrue)和checkAlltrue)开始检查指定的编号为id图像或则所有还未被加载的图像,将其加载到内存中。

显示图像

     通过Componentpaint()方法的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子类paintGraphics g)方法中)

          g.drawImage(imgbuf, 0, 0, this);  //imgbuf为内存缓冲区的图片

解决动画闪烁问题

       重写public  void  updateGraphics g)方法,方法中调用paintg)方法即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值