版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、多媒体编程,声音、图像与动画的实现,多媒体简介,多媒体是一种把文本(Text)、图形(Graphics)、图像(Images)、动画(Animation)和声音(Sound)等形式的信息结合在一起,并通过计算机进行综合处理和控制,能支持完成一系列交互式操作的信息技术。 Applet与Application从定义到最终运行都有何区别?,Applet java小程序,基本工作原理: 编译好的字解码(.class)文件保存在特定的www服务器上,同一个或另一个服务器上保存嵌入了该字解码的HTML文件。 浏览器向服务器请求下载此HTML文件,浏览器遇到HTML中的标志,浏览器会根据这个applet的名
2、字和位置把其字解码下载到本地,利用浏览器本身拥有的java解释器直接执行该字节码。,Applet java小程序,Applet是Panel的子类,是Container的一种。 Applet所需要做的就是 包容和排列其他的图形组件; 响应它所包容范围内的事件。 Applet必须与浏览器协调合作。,Applet java小程序,applet程序中必须为java.applet.Applet类的子类。 applet程序不需要建立自己的主流程框架main(),因为运行它的浏览器会自动为它建立和维护主流程。 类Applet中已经定义了很多的成员方法,它们规定了Applet小程序如何与执行它的浏览器配合工作
3、。 init()、start()、stop()、destroy ()、paint()。 出于安全缘故,applet有许多限制,并不能随意访问资源: 一个applet不能接触到本地的磁盘,不能在本地磁盘上写和读。 Applet只能在它所在的服务器上下载数据,不能从其他服务器上下载数据。,Applet java小程序,Applet java小程序,paint()方法的主要作用是在Applet界面中 显示文字,图片和其他元素。 此方法有一个固定的参数Graphics。当一个applet实例被初始化启动时,浏览器将自动生成一个Graphics类的实例,传递给paint()方法。Graphics用来完成
4、一些较简单的图形操作,如线、多边形等等。 Paint方法何时调用? Applet在被启动之后(Browser自动调用) Applet浏览器窗口改变时(自动调用) 显示掉用repaint()时,系统将先调用update()方法,将applet实例所占的屏幕空间清空(白色),然后再调用paint()方法进行重画。,有paint()方法,import java.awt.*; class SubPanel extends Panel public void paint(Graphics g) g.drawString(this is a drawing test!,20,20); g.drawLine
5、(30,60,100,120); public class AWTDrawing1 private Frame f = new Frame( Hello Out There!); private SubPanel p = new SubPanel(); public void launchFrame() f.add(p); f.setSize(170,170); f.setBackground( new Color(254,1,2); f.setVisible( true); public static void main( String args) AWTDrawing1 guiWindow
6、 = new AWTDrawing1(); guiWindow.launchFrame(); ,没有paint()方法,import java.awt.*; public class AWTDrawing2 private Frame f = new Frame( Hello Out There!); private Panel p = new Panel(); public void launchFrame() f.add(p); f.setSize( 170,170); f.setBackground( Color.blue); f.setVisible( true); Graphics
7、g = p.getGraphics(); g.drawString(this is a drawing test!,20,20); g.drawLine(30,60,100,120); public static void main( String args) AWTDrawing2 guiWindow = new AWTDrawing2(); guiWindow.launchFrame(); ,Applet小程序的绘图举例,import javax.swing.JApplet; import java.awt.*; public class MyHouse extends JApplet p
8、ublic void init() this.setSize(300,300); public void paint(Graphics g) int houseX = 10; int houseY = getHeight()/3; int door = 50, window = 55, windowInset = 20;int houseWidth = (getWidth()/2)*2)-(houseX*2); int houseHeight = (getHeight()/2)*2-50; int x = 0, getWidth()/2, getWidth(); int y = getHeig
9、ht()/3, 5,getHeight()/3; g.setColor(Color.darkGray); g.fillPolygon(x, y , 3 ); g.setColor(Color.yellow); g.fillRect(houseX, houseY, houseWidth, houseHeight); g.setColor(Color.darkGray); g.fillRect(houseX+windowInset,houseY + windowInset, window, window); g.fillRect(houseX + houseWidth - windowInset
10、- window, houseY + windowInset, window, window); g.fillRect(houseX+(houseWidth/2)-door/2, (houseHeight/2)+houseY+windowInset/2, door, houseHeight/2-windowInset/2); ,Applet小程序的绘图举例,嵌入html当中 可以使用浏览器运行 或者 appletviewer index1.html, Tag in HTML*, . , Tag in HTML,一般application程序会从命令行获得参数 例如:java HelloWorl
11、d “hello” 标签: 会从命令行把参数传递给applet小程序。 在Applet的程序当中,可以通过如下方式获得该参数: String MovieName=getParameter(“Movie”); if (MovieName= =null) MovieName=“No Movie”;,Applet举例 bounce.html, Bouncy Bounce! Bouncy Bounce! ,import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class G1 extends Appl
12、et implements ActionListener Label label1 ; Label label2; Button pressMe; String s; public void init() s=getParameter(label); if (s=null)|(s.equals() s=Am I cute?; this.setSize(300,300); this.setBackground(Color.blue); label1 = new Label(s); label1.setFont(new Font(Times Roman,Font.BOLD,20); add(lab
13、el1); pressMe= new Button(Press If You Agree); pressMe.addActionListener(this); add(pressMe); label2= new Label( ); label2.setFont(new Font(Helvetica,Font.BOLD, 24); add(label2); public void actionPerformed(ActionEvent e) label2.setText(Definitely!); this.getAppletContext().showStatus(“Thank you!”);
14、 /可访问浏览器,生成图像文件,Java类库中有很多便于图形图像编程的类,这些类存在于java.awt,javax.swing,java.awt.image,com.sun.image等包中。 举例:创建一个BufferedImage对象,将所要的“画”放到这个“图像缓冲区”里;打开一个文件,将“图像流”编码后输入这个文件,这样就可以生成jpg图像文件。 举例:JpegCreate.java文件,图像与动画,图像的加载,从某个网络节点或者本地获得图像,加载到java Application 或者是java Applet 程序当中,经过处理,再绘制出来。 为了获得图像,要使用URL。,图像的加载
15、:Application,在Application加载图像,awt需要使用类Toolkit提供的方法getImage(),该方法的定义形式有下面两种: Image getImage(URL url); Image getImage(String filename) 例如:Image image=getToolkit().getImage(“fileObj.gif”); Swing中的ImageIcon可直接创建图像实例 ImageIcon (Stringfilename) 根据指定的文件创建一个 ImageIcon。 ImageIcon (URLlocation) 根据指定的 URL 创建一个
16、 ImageIcon。,图像的加载:Application举例,import javax.swing.*; import java.awt.*; public class BouncyBounce extends JPanel private ImageIcon images; private static final int TOTAL_IMAGES = 8; public BouncyBounce() this.images = new ImageIconTOTAL_IMAGES; for (int i = 0; i images.length; i+) imagesi = new Ima
17、geIcon(./bounce/bounce+(i+1)+.JPG);,图像的加载: Applet,在Applet中,类Applet中提供了getImage(),可以直接载入图像,方法格式如下: Image getImage(URL url); Image getImage(URL url, String name); 如果图像文件和Applet位于同一个目录下面,就可以通过getCodeBase()方法获得基 URL,这是包含此 applet 的目录的 URL ;若图像文件和包含Applet的HTML文件位于同一个目录下面,可以使用getDocumentBase()获得地址。 获得image
18、对象后,可以通过drawImage方法在Graphics上“画”出这个图像。,图像的加载: Applet举例,import java.awt.*; import java.applet.*; public class BouncyBounceApplet extends Applet private Image images; private static final int TOTAL_IMAGES=8; public void init() this.setSize(150,150); this.images = new ImageTOTAL_IMAGES; for (int i = 0;
19、 i images.length; i+) imagesi = getImage(getCodeBase(),“bounce”+(i+1)+“.gif”); ,Animation动画,动画的原理:随时间的变化,位移变化或者图形图像的变化。动画的程序框架: timer = new Thread(this); /创建一条用来形成动画的线程 timer.start(); public void run() try Thread.sleep(fps); /等待一定的时间 catch (InterruptedException e) repaint(); /显示地调用此方法重画显示的内容 public
20、void paint() /显示图片,此图片应有变化 ,BouncyBounce,无论是applet还是使用component的application,首先要准备一组连续图片 如果需要背景音乐,或者声效,还需要准备相应的音频文件。,BouncyBounce,创建image 确定delay时间 创建控制线程thread 使用sleep方法 调用repaint方法,BouncyBounce:Applet (1)BouncyBounceApplet.html,import java.awt.*; import java.applet.*; public class BouncyBounceApple
21、t extends Applet implements Runnable private Image images; private static final int TOTAL_IMAGES=8, ANIM_DELAY=150; private int currentImage = 0; private Thread animationThread; private boolean running = true; public void init() this.setSize(300,300); this.images = new ImageTOTAL_IMAGES; for (int i
22、= 0; i images.length; i+) imagesi = getImage(getCodeBase(),bounce+(i+1)+.gif); ,BouncyBounce:Applet (2),public void start() running = true; animationThread = new Thread(this); animationThread.start(); public void stop() running = false; public void run() /用来实现runnable接口 while (running) try animation
23、Thread.sleep(ANIM_DELAY); currentImage = (+currentImage) %TOTAL_IMAGES; repaint(); catch (InterruptedException e) public void paint(Graphics g) g.drawImage(imagescurrentImage,0,0,this); ,BouncyBounce:Application,Timer 类 javax.swing.Timer 在指定延迟之后激发一个或多个操作事件。 例如: int delay = 1000; /milliseconds Action
24、Listener taskPerformer = new ActionListener() public void actionPerformed(ActionEvent evt) /.Perform a task. ; new Timer(delay, taskPerformer).start();,BouncyBounce:Application(1),import javax.swing.*; import java.awt.*; import java.awt.event.*; public class BouncyBounce extends JPanel implements Ac
25、tionListener private ImageIcon images; private static final int TOTAL_IMAGES = 8, ANIM_DELAY = 150; private int currentImage = 0; private Timer animationTimer; public BouncyBounce() this.setLayout(null); this.setSize(300,300); this.images = new ImageIconTOTAL_IMAGES; for (int i = 0; i images.length;
26、 i+) imagesi = new ImageIcon(./bounce/bounce+(i+1)+.JPG); startAnimation(); public void paintComponent(Graphics g) super.paintComponent(g); if (imagescurrentImage.getImageLoadStatus() = MediaTracker.COMPLETE) imagescurrentImage.paintIcon(this, g, 0, 0); currentImage = (+currentImage) % TOTAL_IMAGES;
27、 ,BouncyBounce:Application(2),public void startAnimation() if (animationTimer = null) currentImage = 0; animationTimer = new Timer( ANIM_DELAY, this); animationTimer.start(); else /continue animating. if (!animationTimer.isRunning() animationTimer.restart(); public void stopAnimation() animationTime
28、r.stop(); public void actionPerformed(ActionEvent e) repaint(); public static void main(String args) BouncyBounce bouncyBounce1 = new BouncyBounce(); JFrame main = new JFrame(Bouncy Bounce!); main.add(bouncyBounce1,BorderLayout.CENTER); main.addWindowListener(new WindowAdapter() public void windowCl
29、osing(WindowEvent e) System.exit(0); ); main.setVisible(true); ,BouncyBounce动起来BouncyBounceAlong.java,private int forwardBy = 5; /每次位移量 private int count = 0; /下一次位置 imagescurrentImage.paintIcon(this, g, count, 0); if (count (this.getWidth()-images0.getIconWidth() forwardBy = -5; if (count 0) forwar
30、dBy = 5; count += forwardBy;,小结,Application加载图像 awt需要使用类Toolkit提供的方法getImage() image=getToolkit().getImage(“fileObj.gif”); Swing中的ImageIcon可直接创建图像实例 ImageIcon (Stringfilename)根据指定的文件创建一个 ImageIcon;ImageIcon (URLlocation)根据指定的 URL 创建一个 ImageIcon。 Applet加载图像 类Applet中提供了getImage(),可以直接载入图像 Image getIma
31、ge(URL url); Image getImage(URL url, String name); 如果图像文件和Applet位于同一个目录下面,就可以通过getCodeBase()方法获得地址;若图像文件和包含Applet的HTML文件位于同一个目录下面,可以使用getDocumentBase()获得基地址。 动画的实现 创建image ;确定delay时间;创建控制线程thread ;调用repaint方法,Java中的声音,数字音频,目前Java支持的声音格式主要有AIFF、AU、WAV、MIDI等,音质可为8位或6位的单声道和立体声,采样频率从8kHz到48kHz,当然音频越好占用的
32、资源就越多,网络下载时间越长。 Java在一开始提供了对音频的支持。,Applet数字音频,对于APPLET: Java提供了两种播放声音的方式,一种是通过Applet类的play方法,一种是通过AudioClip接口中的方法播放。 void play(URL url) void play(URL url,String name); 如声音文件audio.mid和applet文件存放在同一目录下,就可以这样表达: play(getCodeBase(),audio.mid);,数字音频,AudioClip类包含在java.applet包中 AudioClip对象的创建: AudiClip get
33、AudioClip(URL url); AudiClip getAudioClip(URL url,String name); AudioClip的成员方法: void play() 播放一遍 void loop() 连续播放 void stop() 停止播放,数字音频:举例Sound Applet. html,import java.applet.*; import java.applet.AudioClip; public class SoundApplet extends Applet private AudioClip bgsound; public void init() bgsound=getAudioClip(getCodeBase(),“cheer
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地球观测技术进展
- 轧钢工安全风险模拟考核试卷含答案
- 快递信息处理员诚信知识考核试卷含答案
- 煤气净化回收工操作评估能力考核试卷含答案
- 涂料合成树脂工安全生产知识评优考核试卷含答案
- 烧碱蒸发工道德测试考核试卷含答案
- 2026年教育机构安全责任书试卷
- 种苗繁育员安全知识竞赛强化考核试卷含答案
- 齿轮制造工复试水平考核试卷含答案
- 贝类繁育工岗前操作能力考核试卷含答案
- 英语试卷+答案黑龙江省哈三中2025-2026学年上学期高二学年12月月考(12.11-12.12)
- 中北大学2025年招聘编制外参编管理人员备考题库(一)参考答案详解
- 中华联合财产保险股份有限公司2026年校园招聘备考题库及一套完整答案详解
- 诗经中的爱情课件
- 2025年烟花爆竹经营单位安全管理人员考试试题及答案
- 2025天津大学管理岗位集中招聘15人参考笔试试题及答案解析
- 2025年云南省人民检察院聘用制书记员招聘(22人)考试笔试参考题库及答案解析
- TCAMET02002-2019城市轨道交通预埋槽道及套筒技术规范
- 24- 解析:吉林省长春市2024届高三一模历史试题(解析版)
- 临床护士工作现状分析
- 电力线路架设安全操作方案
评论
0/150
提交评论