Java Applet常用來顯示存儲在GIF文件中的圖像
Java Applet裝載GIF圖像非常簡單
在Applet內使用圖像文件時需定義Image對象
多數Java Applet使用的是GIF或JPEG格式的圖像文件
Applet使用getImage方法把圖像文件和Image對象聯系起來
Graphics類的drawImage方法用來顯示Image對象
為了提高圖像的顯示效果
許多Applet都采用雙緩沖技術
首先把圖像裝入內存
然後再顯示在屏幕上
Applet可通過imageUpdate方法測定一幅圖像已經裝了多少在內存中
裝載一幅圖像 Java把圖像也當做Image對象處理
所以裝載圖像時需首先定義Image對象
格式如下所示
Image picture;
然後用getImage方法把Image對象和圖像文件聯系起來
picture=getImage(getCodeBase()
ImageFileName
GIF
);
getImage方法有兩個參數
第一個參數是對getCodeBase方法的調用
該方法返回Applet的URL地址
如/Applet
第二個參數指定從URL裝入的圖像文件名
如果圖文件位於Applet之下的某個子目錄
文件名中則應包括相應的目錄路徑
用getImage方法把圖像裝入後
Applet便可用Graphics類的drawImage方法顯示圖像
形式如下所示
g
drawImage(Picture
x
y
this);
該drayImage方法的參數指明了待顯示的圖像
圖像左上角的x坐標和y坐標以及this
第四個參數的目的是指定一個實現ImageObServer接口的對象
即定義了imageUpdate方法的對象(該方法隨後討論)
顯示圖像(ShowImagejava) //源程序清單
import java
awt
*;
import java
applet
*;
public class ShowImage extends Applet
Image picure; //定義類型為Image的成員變量
public void init()
{
picture=getImage(getCodeBase()
Image
gif
); //裝載圖像
}
public void paint(Graphics g)
{
g
drawImage(picture
this); //顯示圖像
}
}
為此
HTML文件中有關Applet的語句如下
<HTML>
<TITLE>Show Image Applet</TITLE>
<APPLET
CODE=
ShowImage
class
//class文件名為ShowImage
class
WIDTH=
HEIGHT=
>
</APPLET>
</HTML>
編譯之後運行該Applet時
圖像不是一氣呵成的
這是因為程序不是drawImage方法返回之前把圖像完整地裝入並顯示的
與此相反
drawImage方法創建了一個線程
該線程與Applet的原有執行線程並發執行
它一邊裝入一邊顯示
從而產生了這種不連續現象
為了提高顯示效果
許多Applet都采用圖像雙緩沖技術
即先把圖像完整地裝入內存然後再顯示在屏幕上
這樣可使圖像的顯示一氣呵成
雙緩沖圖像 為了提高圖像的顯示效果應采用雙緩沖技術
首先把圖像裝入內存
然後再顯示在Applet窗口中
使用雙緩沖圖像技術例子(BackgroundImage
java)
//源程序清單
import java
awt
*;
import java
applet
*;
public class BackgroundImage extends Applet //繼承Applet
{
Image picture;
Boolean ImageLoaded=false;
public void init()
{
picture=getImage(getCodeBase()
Image
gif
); //裝載圖像
Image offScreenImage=createImage(size()
width
size()
height);
//用方法createImage創建Image對象
Graphics offScreenGC=offScreenImage
getGraphics(); //獲取Graphics對象
offScreenGC
drawImage(picture
this); //顯示非屏幕圖像
}
public void paint(Graphics g)
{
if(ImageLoaded)
{
g
drawImage(picture
null); //顯示圖像
第四參數為null
不是this
showStatus(
Done
);
}
else
showStatus(
Loading image
);
}
public boolean imageUpdate(Image img
int infoflags
int x
int y
int w
int h)
{
if(infoflags= =ALLBITS)
{
imageLoaded=true;
repaint();
return false;
}
else
reture true;
}
}
分析該Applet的init方法可知
該方法首先定義了一個名為offScreenImage的Image對象並賦予其createImage方法的返回值
然後創建了一個名為offScreenGC的Graphics對象並賦予其圖形環境——非屏幕圖像將由它來產生
因為這裡畫的是非屏幕圖像
所以Applet窗口不會有圖像顯示
每當Applet調用drawImage方法時
drawImage將創建一個調用imageUpdate方法的線程
Applet可以在imageUpdate方法裡測定圖像已有裝入內存多少
drawImage創建的線程不斷調用imageUpdate方法
直到該方法返回false為止
imageUpdate方法的第二個參數infoflags使Applet能夠知道圖像裝入內存的情況
該參數等於ImageLoaded設置為true並調用repaint方法重畫Applet窗口
該方法最終返回false
防止drawImage的執行線程再次調用imageUpdate方法
該Applet在paint方法裡的操作是由ImageLoaded變量控制的
當該變量變為true時
paint方法便調用drawImage方法顯示出圖像
paint方法調用drawImage方法時把null作為第四參數
這樣可防止drawImage調用imageUpdate方法
因為這時圖像已裝入內存
所以圖像在Applet窗口的顯示可一氣呵成
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26336.html