Java Applet มักใช้เพื่อแสดงภาพที่จัดเก็บไว้ในไฟล์ GIF การโหลดภาพ GIF ใน Java Applet ทำได้ง่ายมาก เมื่อใช้ไฟล์ภาพใน Applet คุณจะต้องกำหนดวัตถุ Image Java Applets ส่วนใหญ่ใช้ไฟล์รูปภาพในรูปแบบ GIF หรือ JPEG แอปเพล็ตใช้เมธอด getImage เพื่อเชื่อมโยงไฟล์รูปภาพกับออบเจ็กต์ Image
เมธอด DrawImage ของคลาส Graphics ใช้เพื่อแสดงออบเจ็กต์ Image เพื่อปรับปรุงเอฟเฟ็กต์การแสดงรูปภาพ แอปเพล็ตจำนวนมากใช้เทคโนโลยีการบัฟเฟอร์สองเท่า โดยขั้นแรกให้โหลดรูปภาพลงในหน่วยความจำ จากนั้นจึงแสดงบนหน้าจอ
แอปเพล็ตสามารถกำหนดจำนวนรูปภาพที่อยู่ในหน่วยความจำได้โดยใช้เมธอด imageUpdate
การโหลดรูปภาพ
Java จะถือว่ารูปภาพเป็นวัตถุรูปภาพ ดังนั้นเมื่อโหลดรูปภาพ คุณต้องกำหนดวัตถุรูปภาพก่อน รูปแบบจะเป็นดังนี้:
รูปภาพ รูปภาพ
จากนั้นใช้เมธอด getImage เพื่อเชื่อมต่อวัตถุรูปภาพและไฟล์รูปภาพ:
picture=getImage(getCodeBase( ),"ImageFileName.GIF");
เมธอด getImage มีพารามิเตอร์สองตัว พารามิเตอร์แรกคือการเรียกเมธอด getCodeBase ซึ่งส่งคืนที่อยู่ URL ของ Applet เช่น www.sun.com/Applet พารามิเตอร์ตัวที่สองระบุชื่อไฟล์รูปภาพที่จะโหลดจาก URL หากไฟล์รูปภาพอยู่ในไดเร็กทอรีย่อยภายใต้ Applet ควรรวมพาธไดเร็กทอรีที่เกี่ยวข้องไว้ในชื่อไฟล์
เพื่อ
แสดงรูปภาพได้ดังนี้:
g.drawImage(Picture,x,y,this);
ระบุรูปภาพที่จะแสดง พิกัด x และ y ของมุมซ้ายบนของรูปภาพและสิ่งนี้
วัตถุประสงค์ของพารามิเตอร์ที่สี่คือเพื่อระบุอ็อบเจ็กต์ที่ใช้อินเทอร์เฟซ ImageObServer นั่นคืออ็อบเจ็กต์ที่กำหนดเมธอด imageUpdate (วิธีการนี้จะกล่าวถึงในภายหลัง)
แสดงรูปภาพ (ShowImage.java)
// รายการโปรแกรมต้นฉบับ
นำเข้า java.awt.*;
นำเข้า java.applet.*;
ShowImage คลาสสาธารณะขยาย Applet
รูปภาพรูปภาพ //กำหนดตัวแปรสมาชิกประเภทรูปภาพ
โมฆะสาธารณะ init()
-
picture=getImage(getCodeBase(),"Image.gif"); //โหลดรูปภาพ
-
สีโมฆะสาธารณะ (กราฟิก g)
-
g.drawImage(รูปภาพ,0,0,นี่); //แสดงรูปภาพ
-
}
ด้วยเหตุนี้ ข้อความเกี่ยวกับ Applet ในไฟล์ HTML จึงมีดังต่อไปนี้:
<HTML>
<TITLE>แสดงแอปเพล็ตรูปภาพ</TITLE>
<แอปเพล็ต
CODE="ShowImage.class" //ชื่อไฟล์คลาสคือ ShowImage.class
กว้าง=600
ความสูง=400>
</แอปเพล็ต>
</HTML><
เมื่อรันแอปเพล็ตหลังจากการคอมไพล์ รูปภาพจะไม่เกิดขึ้นในครั้งเดียว เนื่องจากโปรแกรมไม่โหลดและแสดงรูปภาพทั้งหมดก่อนที่เมธอด DrawImage จะส่งกลับ ในทางตรงกันข้าม เมธอด DrawImage จะสร้างเธรดที่ดำเนินการพร้อมกันกับเธรดการดำเนินการดั้งเดิมของ Applet ซึ่งจะถูกโหลดและแสดงพร้อมกัน ทำให้เกิดความไม่ต่อเนื่องกัน เพื่อปรับปรุงเอฟเฟกต์การแสดงผล แอพเพล็ตจำนวนมากใช้เทคโนโลยีการบัฟเฟอร์ภาพสองเท่า กล่าวคือ รูปภาพจะถูกโหลดลงในหน่วยความจำอย่างสมบูรณ์แล้วจึงแสดงบนหน้าจอ เพื่อให้สามารถแสดงภาพได้ในคราวเดียว
ภาพบัฟเฟอร์คู่
เพื่อปรับปรุงเอฟเฟกต์การแสดงผลของภาพ ควรใช้เทคโนโลยีบัฟเฟอร์สองเท่า รูปภาพจะถูกโหลดลงในหน่วยความจำเป็นครั้งแรก จากนั้นจึงแสดงในหน้าต่างแอพเพล็ต
ตัวอย่างการใช้เทคโนโลยีภาพบัฟเฟอร์คู่ (BackgroundImage.java)
// รายการซอร์สโปรแกรม
นำเข้า java.awt.*;
นำเข้า java.applet.*;
คลาสสาธารณะ BackgroundImage ขยาย Applet // Inherit Applet
-
รูปภาพรูปภาพ;
บูลีน ImageLoaded=false;
โมฆะสาธารณะ init()
-
picture=getImage(getCodeBase(),"Image.gif"); //โหลดรูปภาพ รูปภาพ offScreenImage=createImage(size().width,size().height);
// สร้างวัตถุกราฟิกโดยใช้วิธี createImage offScreenGC=offScreenImage.getGraphics (); // รับวัตถุกราฟิก offScreenGC.drawImage (รูปภาพ, 0,0, นี้); // แสดงภาพนอกหน้าจอ}
สีโมฆะสาธารณะ (กราฟิก g)
-
ถ้า (โหลดรูปภาพแล้ว)
-
g.drawImage(picture,0,0,null); //แสดงรูปภาพ พารามิเตอร์ที่สี่เป็นโมฆะ ไม่ใช่สิ่งนี้
showStatus("เสร็จสิ้น");
-
อื่น
showStatus("กำลังโหลดรูปภาพ");
-
อัปเดตรูปภาพบูลีนสาธารณะ (รูปภาพ img, int infoflags, int x, int y, int w, int h)
-
ถ้า (infoflags= = ALLBITS)
-
imageLoaded=จริง;
ทาสีใหม่();
กลับเท็จ;
-
อื่น
กลับเป็นจริง;
-
}
การวิเคราะห์วิธีการเริ่มต้นของ Applet แสดงให้เห็นว่าวิธีการแรกกำหนดวัตถุ Image ชื่อ offScreenImage และกำหนดค่าที่ส่งคืนของวิธี createImage จากนั้นสร้างวัตถุกราฟิกชื่อ offScreenGC และกำหนดสภาพแวดล้อมกราฟิก - ไม่ใช่หน้าจอ ภาพลักษณ์ก็จะถูกสร้างขึ้นมา เนื่องจากภาพนอกจอถูกวาดไว้ที่นี่ จะไม่มีภาพแสดงในหน้าต่าง Applet
เมื่อใดก็ตามที่ Applet เรียกใช้เมธอด DrawImage DrawImage จะสร้างเธรดที่เรียกเมธอด imageUpdate แอปเพล็ตสามารถกำหนดจำนวนรูปภาพที่โหลดลงในหน่วยความจำได้ในเมธอด imageUpdate เธรดที่สร้างโดย DrawImage จะเรียกเมธอด imageUpdate ต่อไปจนกว่าเมธอดจะส่งกลับค่าเท็จ
infoflags พารามิเตอร์ตัวที่สองของเมธอด imageUpdate ช่วยให้ Applet ทราบว่ารูปภาพถูกโหลดเข้าสู่หน่วยความจำอย่างไร พารามิเตอร์นี้เท่ากับ ImageLoaded และตั้งค่าเป็นจริง และวิธีการทาสีใหม่จะถูกเรียกใช้เพื่อวาดหน้าต่าง Applet ใหม่ ในที่สุดวิธีนี้จะส่งคืนค่าเท็จเพื่อป้องกันไม่ให้เธรดการดำเนินการ DrawImage เรียกเมธอด imageUpdate อีกครั้ง
การทำงานของแอพเพล็ตในวิธีการระบายสีถูกควบคุมโดยตัวแปร ImageLoaded เมื่อตัวแปรนี้เป็นจริง วิธีการระบายสีจะเรียกวิธีการdrawImageเพื่อแสดงรูปภาพ เมื่อเมธอด Paint เรียกใช้เมธอด DrawImage จะใช้ค่าว่างเป็นพารามิเตอร์ตัวที่สี่ ซึ่งป้องกันไม่ให้ DrawImage เรียกเมธอด imageUpdate เนื่องจากขณะนี้รูปภาพถูกโหลดลงในหน่วยความจำแล้ว การแสดงรูปภาพในหน้าต่าง Applet จึงสามารถเสร็จสิ้นได้ในคราวเดียว