实验 8 图形与多媒体处理

一、实验目的
   熟悉图形、图像的使用方法,理解计算机动画的原理和 Java 的多线程处理机制,能够编写 Applet中使用的动画。
二、实验要求
   1. 掌握使用图形类 Graphics 画出不同图形的方法。
   2. 掌握在容器中输入图像、播放音乐的方法。
   3. 理解计算机动画原理,掌握图形双缓冲技术,能够设计计算机动画。
   4. 理解多线程机制,掌握线程的使用方法。
三、实验内容
(一)使用图形类 Graphics
    在 Java 中基本图形包括点、线、圆、矩形等,是构成复杂图形的基础。绘制基本图形要使用 AWT包中的 Graphics 类,它提供了各种基本图形的绘制方法,可以直接引用这些方法画点、线、圆、矩形等。
    1.创建在 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 的页面文件,在浏览器中显示结果如图 7.1 所示。
2.创建使用画布对象的 Applet 应用程序
• 程序功能:创建一个带有多边形、圆的自定义画布类,在 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();//创建画布对象
          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;//多边形的边数
          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 的页面文件,在浏览器中显示结果
(二)插入图像与播放音乐
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");
//获取图像文件地址读取图   像文件到内存          
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 类控制播放的音乐文件,使用“播放”、“连续”、“停止”按钮控制和选择播放音乐的状态。
• 编写 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("连续");

           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 的页面文件,在浏览器中显示结果

你可能感兴趣的:(java,多线程,C++,c,音乐)