程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> Java線程控制的圖像分割與合成

Java線程控制的圖像分割與合成

編輯:JAVA編程入門知識

  摘 要:使用Java對WEB靜態圖像進行分割重組,然後根據用戶的交互操作合成顯示,並利用線程對程序的並發性加以控制,從而達到圖像顯示的動態性和交互性效果。
  
  要害詞:Java語言 類Class 線程Thread
  
  Java是一種面向對象的編程語言。它具有與平台無關、面向對象、動態、安全等特點,答應直接使用多線程方式進行編程,對程序進行並發控制。Java還支持分布式網絡操作,從而能夠方便地進行網絡文件對象的存取。利用Java語言本身提供的繪圖功能,可以繪制一些簡單的圖形。而對於復雜圖形,一般先用繪圖軟件制成圖像,然後采用Java所提供的方法對圖像下載並進行處理和控制,從而實現靜態圖像的動態顯示。
  
  1 Java圖像處理與線程的並發控制
  
  1.1 Java圖像處理
  
  Java語言提供了豐富的類(Class)、接口(Interface)以及相應的調用方法(Method)。使用這些類或接口,可以定義自己的類或子類,充分利用Java面向對象的特性進行編程。在java.awt包中,提供了專門的Image類,它是1種抽象類,可提供抽象的方法描繪圖片的一些共同特性。而在Applet類和Tookit類中都提供了2種getImage()方法下載圖像,分別根據絕對地址和相對地址查詢所要下載的圖像。通常采用相對地址的下載方法,它的語法定義及功能如下:
  
  1.public Image getImage(URL url,String name)
  
  功能:根據相對地址下載圖像。
  
  參數:url??URL(統一資源定位)基地址, name 圖像文件名。
  
  獲取圖像後就可以調用Graphics類提供的drawImage()方法顯示圖像。
  
  2.public drawImage(Image img,int x,int y,observer)
  
  功能:在指定位置顯示圖像。
  
  參數:img 待顯示圖像,x 橫坐標,y 縱坐標,observer 圖像監視器,用來監視圖像的下載情況,接受圖像裝載信息(當圖像完全載入時返回True,否則返回False)。
  
  在顯示圖像時,通常希望獲得對圖像的控制,從而以自己喜歡的各種方式實現媒體播放。為此,Java專門提供了用於跟蹤包括圖像和聲音等多媒體對象的ImageObserver類和MediaTracker類,在本文程序中主要用到的是跟蹤多幅圖像狀態的MediaTracker類。
  
  1.2 Java多線程並發功能
  
  目前,線程(Thread)已經為許多操作系統和應用開發系統所采用。線程是程序的單個控制流,具有順序程序的特點,但是線程不是1個程序,它僅僅是程序的1個執行序列。線程具有很強的並發功能,在同一時刻可能有多個線程同時處於執行狀態。線程是動態的,具有一定的生命周期,分別經歷從創建、執行、阻塞直到消亡的過程。Java語言中提供了專門的Thread類,以支持直接的多線程編程。Thread類提供了對線程的控制方法,如Start(),Stop(),Run()、Suspend()、resume()、Sleep()以及Run()方法等等,它們可以對線程的狀態進行控制。並可以運用SetPriority()方法設置線程的運行優先順序。Thread類的定義方法如下:
  
     Thread(ThreadGroup group,Runable target,String name)
  SetPriority()用來設置線程的優先級。線程優先級是1個介於MINPRIORITY(在類中定義為1)和MAXPRIORITY(在類中定義為10)之間的整數。線程不同的優先級決定了不同線程之間的切換。
  2 Java圖像分割與合成的算法及實現
  
  Java程序首先將一個完整的圖像下載,然後將其分割成20個單元拼圖,即分為5行4列。在本例中特地將第20幅圖像單元設為1個空白圖像,以便拼圖時用戶交互操作使用。這些參數分別定義在相應的變量中。
  
     final int XCELLS=5;  //每行拼圖的數目
  final int YCELLS=4;//每列拼圖的數目
  final int ALLCELLS=20;//分割元素的數目
  final int EMPTY=19;//將第20單元,即cells[19]置成
  //空白圖像
  然後將這些圖像分割單元存於1個Cell類數組cells[]中,在這裡Cell類中含有圖像以及它的起始位置和當前位置,其具體定義如下:
  
     class Cell
  {int sx,sy; //起始位置
  int cx,cy; //當前位置
  Image img; //單元圖像
  public Cell(Image img,int x,int y) //Cell類構造函數
  {this.img=img;
  sx=x;sy=y;} //給起始位置賦值為x,y
  }
  為了對每個圖像分割單元進行狀態跟蹤,還需要建立1個MediaTracker類的實體(instance),然後調用addImage()方法,為每個要跟蹤的圖像指定1個唯一的標識符。標識符決定了圖像獲取時的優先順序並使得圖像能夠獨立完整地進行處理。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved