最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

舉例解析Java的圖像緩沖技術的使用

 更新時間:2015年10月09日 15:41:13   投稿:goldensun  
這篇文章主要介紹了Java的圖像緩沖技術的使用,使用到了Java的awt.image包,需要的朋友可以參考下

當圖像信息量較大,采用以上直接顯示的方法,可能前面一部分顯示后,顯示后面一部分時,由于后面一部分還未從文件讀出,使顯示呈斑駁現(xiàn)象。為了提高顯示效果,許多應用程序都采用圖像緩沖技術,即先把圖像完整裝入內存,在緩沖區(qū)中繪制圖像或圖形,然后將緩沖區(qū)中繪制好的圖像或圖形一次性輸出在屏幕上。緩沖技術不僅可以解決閃爍問題,并且由于在計算機內存中創(chuàng)建圖像,程序可以對圖像進行像素級處理,完成復雜的圖像變換后再顯示。

【例】小應用程序程序演示圖像緩沖顯示技術。程序運行時,當鼠標在圖像區(qū)域內按下時,圖像會出現(xiàn)邊框,托動鼠標時,圖像也隨之移動。抬起鼠標后,邊框消失。程序將兩種狀態(tài)的圖像先放入兩個緩沖區(qū),當鼠標拖動時,不斷地在新的位置重繪鼠標按下樣式的圖像鼠標抬起時,重繪鼠標抬起樣式的圖像。

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()方法的返回值,接著創(chuàng)建Graphics對象并賦予其圖形環(huán)境。最后,讓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()方法的第四個參數(shù)是實現(xiàn)ImageObserver接口,在init()方法中,調用drawImage()方法的參數(shù)是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;
  }
}
/*程序的執(zhí)行過程是,當小程序調用drawImage()方法時,drawImage()方法將創(chuàng)建一個調用 imageUpdate()方法的線程,在imageUpdate()方法中,測定圖像是否已在部分調入內存。創(chuàng)建的線程不斷調用imageUpdate()方法,直到該方法返回false為止。參數(shù)infoFlg使小程序能知道圖像裝入內存的情況。當infoFlg等于ALLBITS時,表示圖像已全部裝入內存。當該方法發(fā)現(xiàn)圖像已全部裝入內存后,置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();
    }
  }
}

程序要創(chuàng)建緩沖區(qū)圖像,需要引入java.awt.image包中的BufferedImage類。要創(chuàng)建一個緩沖區(qū)圖,可以調用createImage()方法,該方法返回一個Image對象,然后再將它轉換成一個BufferedImage對象。例如,代碼:

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


也可利用以下構造方法來建立。

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


其中參數(shù) imageType是圖像類型。

使用緩沖區(qū)顯示圖像,需先在緩沖區(qū)中準備好圖像,再將緩沖區(qū)中的圖像顯示在界面上。顯示圖像需要圖形對象Graphics,可以通過以下方法建立:

  Graphics2D g2d = bimge.createGraphics();

相關文章

  • java.io.EOFException: Unexpected end of ZLIB input stream異常解決

    java.io.EOFException: Unexpected end of 

    本文主要介紹了java.io.EOFException: Unexpected end of ZLIB input stream異常解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • Spring中Bean創(chuàng)建完后打印語句的兩種方法

    Spring中Bean創(chuàng)建完后打印語句的兩種方法

    這篇文章主要介紹了Spring中Bean創(chuàng)建完后打印語句的兩種方法,一個是實現(xiàn)InitializingBean接口,另一個使用@Bean注解和initMethod屬性,通過代碼示例介紹的非常詳細,感興趣的小伙伴可以參考閱讀
    2023-07-07
  • idea中的Maven導包失敗問題解決方案匯總

    idea中的Maven導包失敗問題解決方案匯總

    這篇文章主要介紹了idea中的Maven導包失敗問題解決總結,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • 淺談從Java中的棧和堆,進而衍生到值傳遞

    淺談從Java中的棧和堆,進而衍生到值傳遞

    這篇文章主要介紹了淺談從Java中的棧和堆,進而衍生到值傳遞,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java實現(xiàn)文件讀取和寫入過程解析

    Java實現(xiàn)文件讀取和寫入過程解析

    這篇文章主要介紹了Java實現(xiàn)文件讀取和寫入過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值。,需要的朋友可以參考下
    2019-10-10
  • java集合迭代器Iterator中的remove陷阱

    java集合迭代器Iterator中的remove陷阱

    這篇文章主要介紹了java集合迭代器Iterator中的remove陷阱,需要的朋友可以參考下
    2016-04-04
  • Java模擬微信來電提醒示例

    Java模擬微信來電提醒示例

    這篇文章主要為大家介紹了Java模擬微信來電提醒示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • spring4.3 實現(xiàn)跨域CORS的方法

    spring4.3 實現(xiàn)跨域CORS的方法

    下面小編就為大家分享一篇spring4.3 實現(xiàn)跨域CORS的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • 如何處理maven倉庫中后綴LastUpdated文件

    如何處理maven倉庫中后綴LastUpdated文件

    這篇文章主要介紹了如何處理maven倉庫中后綴LastUpdated文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • springboot controller無效的處理方案

    springboot controller無效的處理方案

    這篇文章主要介紹了springboot controller無效的處理方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評論

平阴县| 军事| 大足县| 寿阳县| 上饶县| 西贡区| 金堂县| 毕节市| 济宁市| 盘锦市| 山阳县| 青海省| 乾安县| 乐平市| 铜梁县| 阿尔山市| 霞浦县| 大足县| 金华市| 苏尼特右旗| 罗山县| 太和县| 永宁县| 灌南县| 木兰县| 申扎县| 鸡泽县| 泰来县| 霍城县| 简阳市| 金昌市| 新田县| 秀山| 浦北县| 仙居县| 蒙城县| 葵青区| 长春市| 高要市| 固镇县| 济宁市|