實驗 8 圖形與多媒體處理
一、實驗目的
?? 熟悉圖形、圖像的使用方法,理解計算機動畫的原理和 Java 的多線程處理機制,能夠編寫 Applet中使用的動畫。
二、實驗要求
?? 1. 掌握使用圖形類 Graphics 畫出不同圖形的方法。
?? 2. 掌握在容器中輸入圖像、播放音樂的方法。
?? 3. 理解計算機動畫原理,掌握圖形雙緩沖技術,能夠設計計算機動畫。
?? 4. 理解多線程機制,掌握線程的使用方法。
三、實驗內(nèi)容
(一)使用圖形類 Graphics
??? 在 Java 中基本圖形包括點、線、圓、矩形等,是構成復雜圖形的基礎。繪制基本圖形要使用 AWT包中的 Graphics 類,它提供了各種基本圖形的繪制方法,可以直接引用這些方法畫點、線、圓、矩形等。
??? 1.創(chuàng)建在 Applet 上畫出不同的圖形的程序
¨?程序功能:在 Applet 上使用不同的顏色畫出直線、圓、方塊、圓弧等圖形。
¨?編寫 KY8_1.java 程序文件,源代碼如下。
??? import java.applet.Applet;
??? import java.awt.Graphics;
??? import java.awt.Color;
??? public class KY7_1 extends Applet {
public void paint(Graphics g) {
?????? g.drawLine(10,10,50,10);//畫線(確定兩點)
?????? g.setColor(Color.red);//設置紅顏色
?????? g.drawOval(35,35,100,60);//畫橢圓(圓心、寬和高)
?????? g.fillOval(200,15,60,100);//畫具有填充色的圓
?????? g.setColor(Color.blue);//設置藍顏色
?????? g.drawRect(20,130,80,80);//畫矩形
?????? g.fillRect(120,130,80,80);//畫具有填充色的矩形
?????? g.drawRoundRect(220,130,80,80,20,20);//畫圓角矩形
?????? g.fillRoundRect(320,130,80,80,20,20);//畫具有填充色的圓角矩形
?????? g.setColor(new Color(255,255,0)); //設置黃顏色
?????? g.drawArc (250,20,100,100,0,90);
?????? g.fillArc (380,20,100,100,90,90);
?????? g.fillArc (300,25,100,100,180,90);
?????? g.drawArc (330,25,100,100,0,-90);
????? }
}
¨?編譯程序 KY8_1.java。
¨?編寫顯示 KY8_1.class 的頁面文件,在瀏覽器中顯示結(jié)果如圖 7.1 所示。
2.創(chuàng)建使用畫布對象的 Applet 應用程序
¨?程序功能:創(chuàng)建一個帶有多邊形、圓的自定義畫布類,在 Applet 上顯示自定義畫布的對象。
¨?編寫 KY8_2.java 程序文件,源代碼如下。
????? import java.applet.Applet;
????? import java.awt.*;
????? import java.awt.Color;
????? public class KY8_2 extends Applet {
??????? public void init() {
????????? Color col=new Color(20,55,75);
????????? setBackground(col);//設置 Applet 的背景色
????????? setForeground(Color.yellow);//設置 Applet 的前景色
????????? MyCanvas1 c=new MyCanvas1();//創(chuàng)建畫布對象
????????? c.setBackground(Color.white);//設置畫布的背景色
????????? c.setSize(300,200);//設置畫布的大小
????????? add(c);
??????? }
????? }
????? class MyCanvas1 extends Canvas {
??????? public void paint(Graphics g) {
????????? g.setColor(Color.red);
????????? g.fillOval(40,20,80,80);//畫圓
????????? g.setColor(Color.cyan);//設置青色
????????? int p1X[]={20,20,100,20};//多邊形的 x 坐標
????????? int p1Y[]={20,80,20,20};//多邊形的 y 坐標
????????? int p1=3;//多邊形的邊數(shù)
????????? g.fillPolygon (p1X,p1Y,p1);//畫填充多邊形
????????? int p2X[]={280,120,50,90,210,280};
????????? int p2Y[]={20,50,100,110,70,20};
????????? int p2=5;
????????? g.drawPolygon (p2X,p2Y,p2);//畫多邊形
??????? }
????? }
¨?編譯程序 KY8_2.java。
¨?編寫顯示 KY8_2.class 的頁面文件,在瀏覽器中顯示結(jié)果
(二)插入圖像與播放音樂 ?
1.?在 Applet 中插入圖像播放音樂
¨?程序功能:在 Applet 中插入 3 種大小的圖像,并在打開文件時部分背景音樂。
¨?編寫 KY8_3.java 程序文件,源代碼如下。
???????? import java.awt.*;
???????? import java.applet.*;
???????? public class KY8_3 extends Applet {
?????????? Image img;
?????????? public void init(){
????????????????? img=getImage(getCodeBase(),"image/飛機.gif");
//獲取圖像文件地址讀取圖?? 像文件到內(nèi)存??????????
play(getDocumentBase(),"WAV/Sound.wav");???????? //播放聲音文件
????? }
???????? public void paint(Graphics g){
????????? int w=img.getWidth(this);
????????? int h=img.getHeight(this);
????????? g.drawImage(img,20,10,this);?????????????? // 畫出原圖
????????? g.drawImage(img,20,100, w/2, h/2, this); // 畫出縮小一倍的圖
????????? g.drawImage(img,160,0, w*2, h*2, this); // 畫出放大一倍的圖
???????? }
??????? }
¨?編譯程序 KY8_3.java。
¨?編寫顯示 KY8_3.class 的頁面文件。
2.?隨時播放聲音文件的程序
¨?程序功能:在 Applet 中使用下拉框顯示音樂文件的名字,在程序中使用 AudioClip 類控制播放的音樂文件,使用“播放”、“連續(xù)”、“停止”按鈕控制和選擇播放音樂的狀態(tài)。
¨?編寫 KY8_4.java 程序文件,源代碼如下。
????? import java.awt.*;
????? import java.awt.event.*;
????? import java.applet.Applet;
???????? import java.applet.AudioClip;
???????? public class KY8_4 extends Applet implements ItemListener, ActionListener {
?????????? AudioClip sound;
?????????? Choice c=new Choice();
?????????? Button play=new Button("播放");
?????????? Button loop=new Button("連續(xù)");
?????????? Button stop=new Button("停止");
?????????? public void init() {
???????????? c.add("space.au"); c.add("flute.aif"); c.add("trip.mid");
???????????? c.add("jungle.rmf"); c.add("Sound.wav");
???????????? add(c); c.addItemListener(this);
???????????? add(play); add(loop); add(stop);
play.addActionListener(this);
???????????? loop.addActionListener(this);
???????????? stop.addActionListener(this);
???????????? sound=getAudioClip(getCodeBase(), "WAV/Sound.wav");
?????????? }
?????????? public void itemStateChanged(ItemEvent e) {
???????????? sound.stop();
???????????? sound=getAudioClip(getCodeBase(), "WAV/"+c.getSelectedItem());
?????????? }
?????????? public void actionPerformed(ActionEvent e) {
???????????? if (e.getSource()==play) sound.play();
???????????? else if (e.getSource()==loop) sound.loop();
???????????? else if (e.getSource()==stop) sound.stop();
?????????? }
???????? }
¨?編譯程序 KY8_4.java。
¨?編寫顯示 KY8_4.class 的頁面文件,在瀏覽器中顯示結(jié)果
評論
查看更多