เมื่อข้อมูลภาพมีขนาดใหญ่และใช้วิธีการแสดงผลโดยตรงข้างต้น ส่วนหน้าอาจแสดงขึ้นและส่วนหลังอาจแสดงได้ เนื่องจากส่วนหลังไม่ได้ถูกอ่านจากไฟล์ ทำให้การแสดงผลปรากฏเป็นรอยด่าง เพื่อปรับปรุงเอฟเฟ็กต์การแสดงผล แอปพลิเคชั่นจำนวนมากใช้เทคโนโลยีบัฟเฟอร์รูปภาพ กล่าวคือ โหลดรูปภาพทั้งหมดลงในหน่วยความจำก่อน วาดภาพหรือกราฟิกในบัฟเฟอร์ จากนั้นจึงส่งออกรูปภาพหรือกราฟิกที่วาดในบัฟเฟอร์บนหน้าจอ ในครั้งเดียว เทคโนโลยีบัฟเฟอร์ไม่เพียงแต่แก้ปัญหาการกะพริบเท่านั้น แต่เนื่องจากรูปภาพถูกสร้างขึ้นในหน่วยความจำคอมพิวเตอร์ โปรแกรมจึงสามารถดำเนินการประมวลผลระดับพิกเซลบนรูปภาพและทำการแปลงรูปภาพที่ซับซ้อนให้เสร็จสิ้นก่อนที่จะแสดง
[ตัวอย่าง] แอปพลิเคชันขนาดเล็กสาธิตเทคโนโลยีการแสดงภาพบัฟเฟอร์ เมื่อโปรแกรมกำลังทำงาน เมื่อกดเมาส์ภายในพื้นที่ภาพ จะมีเส้นขอบปรากฏบนภาพ และเมื่อเลื่อนเมาส์ ภาพก็จะเคลื่อนไหวตามนั้น หลังจากยกเมาส์ขึ้น ขอบจะหายไป ขั้นแรกโปรแกรมจะวางรูปภาพในสองสถานะออกเป็นสองบัฟเฟอร์ เมื่อลากเมาส์ รูปภาพที่มีรูปแบบการเลื่อนเมาส์ลงจะถูกวาดใหม่อย่างต่อเนื่องที่ตำแหน่งใหม่ เมื่อยกเมาส์ขึ้น รูปภาพที่มีรูปแบบการเลื่อนเมาส์ขึ้นจะถูกวาดใหม่ .
import java.applet.*;import java.awt.*;import java.awt.image. * ;import javax.swing.*;import java.event.*;คลาสสาธารณะ Example7_6 ขยาย Applet{ Image myPicture; ) ขั้นแรกให้กำหนดออบเจ็กต์ Image และกำหนดค่าที่ส่งคืนของเมธอด createImage() จากนั้นสร้างออบเจ็กต์กราฟิกและกำหนดสภาพแวดล้อมกราฟิก สุดท้าย ให้ออบเจ็กต์ Graphics เรียกใช้เมธอด DrawImage() เพื่อแสดงรูปภาพ เนื่องจากวัตถุกราฟิก offScreenGc ที่นี่เป็นวัตถุที่ไม่ใช่หน้าจอ จะไม่มีรูปภาพแสดงในหน้าต่างแอปเพล็ต*/ public void init(){ myPicture = getImage(getCodeBase(), "myPic.JPG"); Image offScreenImage = createImage (size() .width, size().height); กราฟิก offScreenGc = offScreenImage.getGraphics(); BufferedDemo(myPicture); } /*พารามิเตอร์ที่สี่ของเมธอด DrawImage() คือการใช้อินเทอร์เฟซ ImageObserver ในเมธอด init() พารามิเตอร์สำหรับการเรียกเมธอด DrawImage() คือสิ่งนี้ ดังนั้นแอปเพล็ตจะต้องกำหนด imageUpdate () วิธีการ*/ imageUpdate บูลีนสาธารณะ (รูปภาพ img, int infoFlg, int x, int y, int w, int h){ ถ้า (infoFlg = ALLBITS){ // แสดงว่ารูปภาพถูกโหลดลงในหน่วยความจำใหม่แล้ว (); // ป้องกันไม่ให้เธรดเรียกเมธอด imageUpdate() อีกครั้ง} มิฉะนั้นจะคืนค่าจริง }}/*กระบวนการดำเนินการของโปรแกรมคือเมื่อใด แอปเพล็ตเรียกเมธอด DrawImage() เมธอด DrawImage() จะสร้างเธรดที่เรียกเมธอด imageUpdate() โดยจะพิจารณาว่ารูปภาพถูกถ่ายโอนไปยังหน่วยความจำบางส่วนหรือไม่ เธรดที่สร้างขึ้นจะเรียกเมธอด imageUpdate() ต่อไปจนกว่าเมธอดจะส่งกลับค่า false พารามิเตอร์ infoFlg ช่วยให้แอปเพล็ตทราบว่ารูปภาพถูกโหลดลงในหน่วยความจำอย่างไร เมื่อ infoFlg เท่ากับ ALLBITS หมายความว่ารูปภาพถูกโหลดลงในหน่วยความจำจนเต็มแล้ว เมื่อเมธอดนี้พบว่ารูปภาพถูกโหลดลงในหน่วยความจำเรียบร้อยแล้ว จะตั้งค่า imageLoaded ให้เป็นจริง และเรียกเมธอด repaint() เพื่อวาดหน้าต่างแอปเพล็ตใหม่ วิธีการคืนค่าเท็จเพื่อป้องกันไม่ให้เธรดเรียกเมธอด imageUpdate() อีกครั้ง */class BufferedDemo ขยาย JFrame{ public BufferedDemo(Image img){ this.getContentPane().add(new PicPanel(img)); setTile("การสาธิตเทคโนโลยีบัฟเฟอร์สองเท่า"); setSize(300, 300); ; }}คลาส PicPane ขยาย JPanel ใช้ MouseListener, MouseMotionListener{ int x = 0, y = 0, dx = 0, cy = 0; BufferedImage bimg1, bimg2; boolean upstate = true; bimg1 = ใหม่ BufferedImage(img.getWidth(นี่) img.getHeight(นี่), BufferedImage.TYPE_INT_ARGB); bimg2 = ใหม่ BufferedImage(img.getWidth(นี่), img.getHeight(นี่), BufferedImage.TYPE_INT_ARGB); Graphics2D g2D1 = bimg1.createGraphics(); Graphics2D g2D2 = bimg2. สร้างกราฟิก(); g2D1.drawImage(img, 0, 0, นี่); g2D2.drawImage(img, 0, 0, นี้); g2D2.drawRect(1, 1, img.getWidth(นี่) - 3, img.getHeight(นี่) - 3); } โมฆะสาธารณะ paintComponent (กราฟิก g) { super.painComponent (g); Graphics2D g2D = (Graphics2D)g; if (upState) g2D.drawImage(bimg1, x, y, this); อื่น ๆ g2D.drawImage(bimg2.x, y, this); } โมฆะสาธารณะ mousePress(MouseEvent e){ if (e.getX () >= x && e.getX() < x + bimg1.getWidth(นี่) && e.getY() >= y&& e.getY() < y + bimg1.getHeight(this)){ ตอนเหนือของรัฐ = false; setCursor(Cursor.getPredefedCursor(Coursor.HAND_CURSOR)); dx = e.getX() - x; y; repain(); } } โมฆะสาธารณะ mouseExited(MouseEvent e){} โมฆะสาธารณะ mouseClicked(MouseEvent e){} โมฆะสาธารณะ mouseEntered(MouseEvent e){} โมฆะสาธารณะ MouseReleased(MouseEvent e){ this.setCursor(Cursor.getpredefedCursor(Cursor.DEFAULT_CURSOR)); upState = true; ){} โมฆะสาธารณะ mouseDragged(MouseEvent e){ if (!upState){ x = e.getX() - dx; y = e.getY() - dy; ทาสีใหม่();
ในการสร้างบัฟเฟอร์อิมเมจ โปรแกรมจำเป็นต้องแนะนำคลาส BufferedImage ในแพ็คเกจ java.awt.image หากต้องการสร้างบัฟเฟอร์อิมเมจ ให้เรียกใช้เมธอด createImage() ซึ่งจะส่งคืนออบเจ็กต์ Image แล้วแปลงเป็นออบเจ็กต์ BufferedImage ตัวอย่างเช่น รหัส:
BufferedImage bimage = (BufferedImage)this.createImage(this.getWidth(),this.getHeight());
คุณยังสามารถใช้วิธีการก่อสร้างต่อไปนี้เพื่อสร้างมันขึ้นมาได้
BufferedImage (ความกว้าง int, int สูง, int imageType);
พารามิเตอร์ imageType คือประเภทรูปภาพ
หากต้องการใช้บัฟเฟอร์เพื่อแสดงรูปภาพ คุณต้องเตรียมรูปภาพในบัฟเฟอร์ก่อน จากนั้นจึงแสดงรูปภาพในบัฟเฟอร์บนอินเทอร์เฟซ การแสดงภาพต้องใช้ออบเจ็กต์กราฟิก ซึ่งสามารถสร้างได้ด้วยวิธีการต่อไปนี้:
Graphics2D g2d = bimge.createGraphics();