国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

JavaApplet編程之實現顯示圖像

2019-11-18 11:14:37
字體:
來源:轉載
供稿:網友

  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地址,如www.sun.com/Applet。第二個參數指定從URL裝入的圖像文件名。假如圖文件位于Applet之下的某個子目錄,文件名中則應包括相應的目錄路徑。
  
  用getImage方法把圖像裝入后,Applet便可用Graphics類的drawImage方法顯示圖像,形式如下所示:
  
  g.drawImage(Picture,x,y,this);
  
  該drayImage方法的參數指明了待顯示的圖像、圖像左上角的x坐標和y坐標以及this。
  
  第四個參數的目的是指定一個實現ImageObServer接口的對象,即定義了imageUpdate方法的對象(該方法隨后討論)。
  
  顯示圖像(ShowImage.java)
  //源程序清單
  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,0,0,this); //顯示圖像
  }
  }
  
  為此,Html文件中有關Applet的語句如下:
  
  <HTML>
  <TITLE>Show Image Applet</TITLE>
  <APPLET
  CODE="ShowImage.class" //class文件名為ShowImage.class
  WIDTH=600
  HEIGHT=400>
  </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,0,0,this); //顯示非屏幕圖像
  }
  public void paint(Graphics g)
  {
  if(ImageLoaded)
  {
  g.drawImage(picture,0,0,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窗口的顯示可一氣呵成。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 林西县| 枞阳县| 商丘市| 咸阳市| 台中县| 淳化县| 金乡县| 皮山县| 九龙县| 山西省| 梁山县| 东至县| 左贡县| 通辽市| 平泉县| 金湖县| 乌拉特前旗| 错那县| 大关县| 承德市| 白银市| 安岳县| 汨罗市| 宜春市| 康平县| 会理县| 新竹县| 海城市| 莱州市| 新乡县| 沙坪坝区| 清水河县| 高雄市| 江油市| 平阴县| 成安县| 荣昌县| 嘉峪关市| 隆安县| 鄂托克旗| 凤翔县|