熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java Applet編程之實現顯示圖像

2013-11-23 19:08:03  來源: Java核心技術 

  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()ImageFileNameGIF);
  
  getImage方法有兩個參數第一個參數是對getCodeBase方法的調用該方法返回Applet的URL地址如/Applet第二個參數指定從URL裝入的圖像文件名如果圖文件位於Applet之下的某個子目錄文件名中則應包括相應的目錄路徑
  
  用getImage方法把圖像裝入後Applet便可用Graphics類的drawImage方法顯示圖像形式如下所示
  
  gdrawImage(Picturexythis);
  
  該drayImage方法的參數指明了待顯示的圖像圖像左上角的x坐標和y坐標以及this
  
  第四個參數的目的是指定一個實現ImageObServer接口的對象即定義了imageUpdate方法的對象(該方法隨後討論)
  
  顯示圖像(ShowImagejava)
  //源程序清單
  import javaawt*;
  import javaapplet*;
  public class ShowImage extends Applet
  Image picure; //定義類型為Image的成員變量
  public void init()
  {
  picture=getImage(getCodeBase()Imagegif); //裝載圖像
  }
  public void paint(Graphics g)
  {
  gdrawImage(picturethis); //顯示圖像
  }
  }
  
  為此HTML文件中有關Applet的語句如下
  
  <HTML>
  <TITLE>Show Image Applet</TITLE>
  <APPLET
  CODE=ShowImageclass //class文件名為ShowImageclass
  WIDTH=
  HEIGHT=>
  </APPLET>
  </HTML>
  
  編譯之後運行該Applet時圖像不是一氣呵成的這是因為程序不是drawImage方法返回之前把圖像完整地裝入並顯示的與此相反drawImage方法創建了一個線程該線程與Applet的原有執行線程並發執行它一邊裝入一邊顯示從而產生了這種不連續現象為了提高顯示效果許多Applet都采用圖像雙緩沖技術即先把圖像完整地裝入內存然後再顯示在屏幕上這樣可使圖像的顯示一氣呵成
  
  雙緩沖圖像
  為了提高圖像的顯示效果應采用雙緩沖技術首先把圖像裝入內存然後再顯示在Applet窗口中
  
  使用雙緩沖圖像技術例子(BackgroundImagejava)
  
  //源程序清單
  import javaawt*;
  import java applet*;
  public class BackgroundImage extends Applet //繼承Applet
  {
  Image picture;
  Boolean ImageLoaded=false;
  public void init()
  {
  picture=getImage(getCodeBase()Imagegif); //裝載圖像
  Image offScreenImage=createImage(size()widthsize()height);
  //用方法createImage創建Image對象
  Graphics offScreenGC=offScreenImagegetGraphics(); //獲取Graphics對象
  offScreenGCdrawImage(picturethis); //顯示非屏幕圖像
  }
  public void paint(Graphics g)
  {
  if(ImageLoaded)
  {
  gdrawImage(picturenull); //顯示圖像第四參數為null不是this
  showStatus(Done);
  }
  else
  showStatus(Loading image);
  }
  public boolean imageUpdate(Image imgint infoflagsint xint yint wint 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
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.