程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 舉例解析Java的圖象緩沖技巧的應用

舉例解析Java的圖象緩沖技巧的應用

編輯:關於JAVA

舉例解析Java的圖象緩沖技巧的應用。本站提示廣大學習愛好者:(舉例解析Java的圖象緩沖技巧的應用)文章只能為提供參考,不一定能成為您想要的結果。以下是舉例解析Java的圖象緩沖技巧的應用正文


當圖象信息量較年夜,采取以上直接顯示的辦法,能夠後面一部門顯示後,顯示前面一部門時,因為前面一部門還未從文件讀出,使顯示呈班駁景象。為了進步顯示後果,很多運用法式都采取圖象緩沖技巧,即先把圖象完全裝入內存,在緩沖區中繪制圖象或圖形,然後將緩沖區中繪制好的圖象或圖形一次性輸入在屏幕上。緩沖技巧不只可以處理閃耀成績,而且因為在盤算機內存中創立圖象,法式可以對圖象停止像素級處置,完成龐雜的圖象變換後再顯示。

【例】小運用法式法式演示圖象緩沖顯示技巧。法式運轉時,當鼠標在圖象區域內按下時,圖象會湧現邊框,托動鼠標時,圖象也隨之挪動。抬起鼠標後,邊框消逝。法式將兩種狀況的圖象先放入兩個緩沖區,當鼠標拖動時,赓續地在新的地位重繪鼠標按下款式的圖象鼠標抬起時,重繪鼠標抬起款式的圖象。

import java.applet.*;
import java.awt.*;
imprt java.awt.image. * ;
import javax.swing.*;
import java.event.*;
public class Example7_6 extends Applet{
  Image myPicture;
  /*init()辦法中,先界說一個Image對象,並付與createImage()辦法的前往值,接著創立Graphics對象並付與其圖形情況。最初,讓Graphics對象挪用drawImage()辦法顯示圖象。
因為這裡的Graphics對象offScreenGc長短屏幕對象是,小法式窗口不會有圖象顯示*/
  public void init(){
    myPicture = getImage(getCodeBase(), "myPic.JPG");
    Image offScreenImage = createImage(size().width, size().height);
    Graphics offScreenGc = offScreenImage.getGraphics();
    new BufferedDemo(myPicture);
  }
  /*drawImage()辦法的第四個參數是完成ImageObserver接口,在init()辦法中,挪用drawImage()辦法的參數是this,所以小法式要界說imageUpdate()辦法*/
  public boolean imageUpdate(Image img, int infoFlg, int x, int y, int w, int h){
    if (infoFlg = ALLBITS){ // 表現圖象已全體裝入內存
      repaint();
      return false;// 避免線程再次挪用imageUpdate()辦法
    }
    else
      return true;
  }
}
/*法式的履行進程是,當小法式挪用drawImage()辦法時,drawImage()辦法將創立一個挪用 imageUpdate()辦法的線程,在imageUpdate()辦法中,測定圖象能否已在部門調入內存。創立的線程赓續挪用imageUpdate()辦法,直到該辦法前往false為止。參數infoFlg使小法式能曉得圖象裝入內存的情形。當infoFlg等於ALLBITS時,表現圖象已全體裝入內存。當該辦法發明圖象已全體裝入內存後,置imageLoaded為真,並挪用repaint()辦法重畫小法式窗口。辦法前往false避免線程再次挪用imageUpdate()辦法。*/
class BufferedDemo extends JFrame{
  public BufferedDemo(Image img){
    this.getContentPane().add(new PicPanel(img));
    setTile("雙緩技巧演示");
    setSize(300, 300);
    setVisible(true);
  }
}
class PicPane extends JPanel implements MouseListener, MouseMotionListener{
  int x = 0, y = 0, dx = 0, cy = 0;
  BufferedImage bimg1, bimg2;
  boolean upstate = true;
  public picPanel(Image img){
    this.setBackground(Color.white);
    this.addMouseListener(this);
    this.addMouseMotionListener(this);
    bimg1 = new BufferedImage(img.getWidth(this), img.getHeight(this),
    BufferedImage.TYPE_INT_ARGB);
    bimg2 = new BufferedImage(img.getWidth(this), img.getHeight(this),
    BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2D1 = bimg1.createGraphics();
    Graphics2D g2D2 = bimg2.createGraphics();
    g2D1.drawImage(img, 0, 0, this);
    g2D2.drawImage(img, 0, 0, this);
    g2D2.drawRect(1, 1, img.getWidth(this) - 3, img.getHeight(this) - 3);
  }
  public void paintComponent(Graphics g){
    super.painComponent(g);
    Graphics2D g2D = (Graphics2D)g;
    if (upState)
      g2D.drawImage(bimg1, x, y, this);
    else
      g2D.drawImage(bimg2.x, y, this);
  }
  public void mousePress(MouseEvent e){
    if (e.getX() >= x && e.getX() < x + bimg1.getWidth(this) && e.getY() >= y&& e.getY() < y + bimg1.getHeight(this)){
      upstate = false;
      setCursor(Cursor.getPredefinedCursor(Coursor.HAND_CURSOR));
      dx = e.getX() - x;
      dy = e.getY() - y;
      repain();
    }
  }
  public void mouseExited(MouseEvent e){}
  public void mouseClicked(MouseEvent e){}
  public void mouseEntered(MouseEvent e){}
  public void MouseReleased(MouseEvent e){
    this.setCursor(Cursor.getpredefinedCursor(Cursor.DEFAULT_CURSOR));
    upState = true;
    repaint();
  }
  public void mouseMoved(MouseEvent e){}
  public void mouseDragged(MouseEvent e){
    if (!upState){
      x = e.getX() - dx;
      y = e.getY() - dy;
      repaint();
    }
  }
}

法式要創立緩沖區圖象,須要引入java.awt.image包中的BufferedImage類。要創立一個緩沖區圖,可以挪用createImage()辦法,該辦法前往一個Image對象,然後再將它轉換成一個BufferedImage對象。例如,代碼:

  BufferedImage bimage = (BufferedImage)this.createImage(this.getWidth(),this.getHeight());


也可應用以下結構辦法來樹立。

  BufferedImage(int width,int heigh, int imageType);


個中參數 imageType是圖象類型。

應用緩沖區顯示圖象,需先在緩沖區中預備好圖象,再將緩沖區中的圖象顯示在界面上。顯示圖象須要圖形對象Graphics,可以經由過程以下辦法樹立:

  Graphics2D g2d = bimge.createGraphics();

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