java纪实之:java application 和java applet里对图片(image)操作的异同

该文章和上一篇的写作原因都是一样一样的,都是这次工作所使然。


将applet改为application的过程中,如果applet中没有对image的操作,那么改起来是很easy,按照上文所讲,加一个main()函数就OK,但是如果applet里有对image的操作的话,就稍微有些麻烦:
applet 文件原先的内容:
void initForm()
{
this.setBackground (Color.orange);
if(off_drag==null){
off_drag = createImage(width/4,height/4);
off_drag_buf = off_drag.getGraphics ();
}
}

其中的 off_drag是一个Image类型,这里off_drag总是为空,造成图像的加载失败;
首先查看java api,了解一下原理,原来createImage(width/4,height/4);的作用就是创建一个双缓存图像,但是为什么为空呢?

上网google,得出了一个结论,这个好像是sun 公司编写的java api 的一个debug,该函数很有可能一直返回空。

既然该createImage(width/4,height/4)不稳定,那我能不能不用这个函数呢,反正java api里的函数那么多,我找个功能一样的不就完了吗?

再次google,有一个叫BufferedImage的类不错,这个是一次缓冲的图像,
off_drag的类型修改为 BufferedImage类型,

修改代码:
void initForm()
{
this.setBackground (Color.orange);
if(off_drag==null){
off_drag = new BufferedImage(width/4,height/4,BufferedImage.TYPE_3BYTE_BGR);
off_drag_buf = off_drag.getGraphics ();
}
}
这时就OK了,off_drag不在为null.


贴一下效果图,让大家爽一下: java纪实之:java application 和java applet里对图片(image)操作的异同


补充一下:在applet里可以通过下面的方法:
MediaTracker tracker= new MediaTracker (this);
//要载入的图片
pic[0]=getImage(getCodeBase(),"PICTURE0.JPG");
pic[1]=getImage(getCodeBase(),"PICTURE1.JPG");
pic[2]=getImage(getCodeBase(),"PICTURE2.GIF");


getCodeBase()方法是获取载入该applet文件的html文件的位置,因为在application里没有html了,所以该方法会报错,google了一下,网上有说改为getDocumentBase()方法,但是也达不到正确的结果,可以用toolkit来加载图像。
Toolkit toolkit = Toolkit.getDefaultToolkit();
pic[0] = toolkit.getImage("PICTURE0.JPG");
pic[1] = toolkit.getImage("img/PICTURE1.JPG");
pic[2] = toolkit.getImage("img/PICTURE2.GIF");

你可能感兴趣的:(java,html,工作,Google,sun)