第11章 Java多媒体技术.

Slides:



Advertisements
Similar presentations
主要内容 Java 的常用包 Java 的常用包 “ == ” 和 “ equals ” 的用法 “ == ” 和 “ equals ” 的用法 基本数据类型与引用类型 基本数据类型与引用类型 String 和 StringBuffer String 和 StringBuffer 对象的克隆( clone.
Advertisements

第 2 章 Java 运行环境搭建 2.1 Java 的运行系统 2.1 Java 的运行系统 2.2 JDK 的安装与配置2.2 JDK 的安装与配置 2.3 Java 开发工具包 2.4 Java 源文件编辑环境的选择 2.5 Application 和 Applet 程序的编写与运行.
Java 程序分类 Java Application :是完整程序,需要独立的解 释器解释运行;以 “.java” 为后缀的文件,以 main() 方法作为程序入口,由 java 编译器编译生 成字节码,由 Java 解释器加载执行字节码。 Java Applet 没有 main() 方法作为程序入口,是嵌在.
Java 程序设计 案例教程 北京大学出版社 第 01 章. Java 程序设计案例教程 第 01 章 Java 语言与面向对象程序设计 Java 语言的历史 Java 语言的特点 Java 程序的分类 Java 环境配置 Eclipse 的安装 Java 程序的调试 教学目标.
第四章 类、对象和接口.
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
《 Java开发环境配置》 主讲人:耿力.
Java 2实用教程(第3版)教学课件 主讲教师:张国平
JAVA程序设计 天津工程职业技术学院计算机工程系软件技术教研室.
Java程序设计教程 第一讲 Java概述.
四資二甲 第三週作業 物件導向程式設計.
Web技术 第8章 Applet应用 龚涛 东华大学信息科学与技术学院 2016年3月 教材:《JSP程序员成长攻略》
Java System Concepts and Animation Programming
Hello小程序的运行和编译 Java AppletJava小程序的构成 1、关键字
项目:贪吃蛇游戏设计 工作任务一:系统设计(system design) 工作任务二:豆类(Bean)设计
6.5 图形界面的布局设计 每一个容器组件都有一个默认的布局管理方式,也可以用setLayout方法来设置其他布局管理器。一旦确定了布局管理方式,容器组件就可以用add方法加入组件。 布局管理器用来确定组件在容器中的位置和大小,AWT中定义了布局管理器接口LayoutManager的实现类来实现此功能。
Java Applet的运行原理 在网页向Java Applet传值 在Java Applet中播放声音 在Java Applet中使用组件
第14章 图形与图像 14.1 绘制文本 14.2 绘制基本图形 14.3 建立字体 14.4 清除 14.5 Java 2D
第三部分 Java语言编程应用篇 第6章 Java语言的 图形用户界面开发技术 (之二).
第二章 JAVA语言基础.
第二部分 Java语言基础篇 第4章 Java语言与面向对象 (之一).
Ch07 介面與多重繼承 物件導向程式設計(II).
第三章 控制结构.
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
Ch02 視窗Swing套件 物件導向系統實務.
Java语言程序设计-图形用户界面设计(2)
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
2018/11/15 面向对象与多线程综合实验-GUI设计 教师:段鹏飞.
例外處理(Exception Handling)
Ch07 Java Applets 物件導向系統實務.
Java语言程序设计 第七部分 多线程.
2018/11/20 第一章 Java概述 武汉大学计算机学院计算机应用系 2018/11/20 14:33.
Chapter 9 設計的精細製作: 行動計算 Software Engineering – An Engineering Approach, James F. Peters & Witold Pedrycz.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
程式設計實作.
CH09 套件 物件導向程式設計(II).
記事本 物件導向系統實務.
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
Java程序设计 第9章 继承和多态.
第10章 Java的线程处理 10.1 线程的基本概念 10.2 线程的属性 10.3 线程组 10.4 多线程程序的开发.
Java语言程序设计 第八部分 Applet小程序.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
第一次课后作业 1. C/C++/Java 哪些值不是头等程序对象 2. C/C++/Java 哪些机制采用的是动态束定
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
Ch04 事件處理 物件導向系統實務.
异常及处理.
Ch02-基礎語法.
CH04 視窗中元件排排坐 物件導向系統實務.
C/C++/Java 哪些值不是头等程序对象
資訊學科中心研習 JAVA程式設計專題 臺北市立大理高級中學 黃世隆 2019/2/23.
4.2通讯服务模块线程之间传递信息 信息工程系 向模军 Tel: QQ:
Multithread 多執行緒 以GUI為例了解物件以及Event
JAVA 编 程 技 术 主编 贾振华 2010年1月.
《JAVA程序设计》 语音答疑 辅导老师:高旻.
第二章Java基本程序设计.
第二章 Java基本语法 讲师:复凡.
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
第二章 Java基本语法 讲师:复凡.
第6章 面向对象的高级特征 学习目标 本章要点 上机练习 习 题.
Java语言程序设计 清华大学出版社 第6章 java图形与图像处理.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
Applet.
第二章 Java基础语法 北京传智播客教育
Summary
变量定位图形 Java中数据的类型分为四种:基本数据类型、数组类型、类类型以及接口类型。任何常量和变量都一定是上述四种数据类型中的一种。简单数据类型的实例化有两种:变量和常量。 变量名和常量名必须是Java语言中合法的标识符。 常量是在程序运行期间值不改变的量。 变量是在程序运行期间值可通过赋值改变的量,
Presentation transcript:

第11章 Java多媒体技术

11.1 图像 Java支持的图像文件格式有GIF和JPEG格式等。下面分别简单介绍在Java Applet和应用程序显示图形图像的方法和步骤。

1.在Applet中显示图像 (1)图像的装载 要显示图像先要进行图像的装载。在Applet类中提供了getImage()方法来将指定路径的图像文件装载到Applet中。由于Java语言是面向网络的,因此文件的存储位置不局限于本地机器的磁盘。大部分情况是存取网络中Web服务器上的图像文件。getImage()方法的声明如下: public Image getImage(URL url)获得绝对url地址指定的image对象。 public Image getImage(URL url,String name) 获得绝对url地址指定的image对象,name指明相对于url的image图像文件名。

(2)图像的显示 在获得Image对象后,可用Graphics类的drawImage()方法显示图像。drawImage()方法有6种不同的重载形式,常用的声明形式为: public abstract boolean drawImage(Image img,int x,int y,ImageObserver observer)在点坐标(x,y)处(图像位于该点的右下方)将图像文件img按原样大小显示出来。 public abstract boolean drawImage(Image img,int x,int y,int width,int height, ImageObserver observer)在坐标(x,y)处将图像文件img按width和height指定的大小显示出来,这种格式能够放大或缩小图像。

drawImage()方法在显示完图像的信息后就会返回。 若需要使用裁剪效果,也可以使用Graphics类的setClip()方法或clipRect()方法。这些方法的声明如下: public abstract void setClip(int x,int y,int width,int height) public abstract void clipRect(int x,int y,int width,int height) 它们的功能均为以坐标(x,y)为左上角,大小为width和height的矩形设置裁剪区域。

程序运行时,需要在Applet程序所在目录的下一级目录images中存储有dog.gif文件。 import java.applet.Applet; import java.awt.*; public class ImageDemo extends Applet { private Image im; public void init() { im = getImage(getCodeBase(),"images/dog.gif"); } public void paint(Graphics g) { g.drawImage(im, 0, 0, this); 程序运行时,需要在Applet程序所在目录的下一级目录images中存储有dog.gif文件。

例11.1程序运行结果如下图所示。

2.在应用程序中显示图像 在应用程序中,装载图像需要使用Toolkit类来实现。一般通过Toolkit类的getDefaultToolkit()方法或通过调用Component类的getToolkit()方法来获得一个Toolkit对象。这两个方法的声明如下: public static Toolkit getDefaultToolkit() // Toolkit类的方法 public Toolkit getToolkit() // Component类的方法

【例11.2】在应用程序中装载并显示图像。 import java.awt.*; import javax.swing.*; class ImageDemo1 extends JPanel { private Image im; public ImageDemo1() { String imageF = System.getProperty("user.dir") + "/sunflowr.jpg"; im = getToolkit().getImage(imageF); setBackground(Color.white); } public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(im, 0, 0, this);

public static void main(String[] args) { JPanel panel = new ImageDemo1(); JFrame frame = new JFrame("向日葵"); frame.setBackground(Color.white); panel.setBackground(Color.white); frame.setSize(200, 150); frame.setContentPane(panel); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }

例11.2程序运行结果如下图所示。

若在程序中显示图像前增加设置裁剪区域的语句,即: g.clipRect(0,10, 200, 160); // 增加这个语句 g.drawImage(im, 0, 0, this); 则程序的运行结果如下图所示。

11.2 动画 动画技术的原理是多幅图画每隔一定时间间隔连续进行显示。 【例11.3】一个简单的文字滚动的 Applet。这个Applet创建一个滚动信息的线程,信息从Applet的显示区域自右至左滚动显示。 import java.applet.Applet; import java.awt.*; public class SimpleBanner extends Applet implements Runnable { String msg = " A Simple Moving Banner.";

Thread t = null; int state; boolean stopFlag; public void init() { // 设置颜色 setBackground(Color.cyan); setForeground(Color.red); setFont(new Font("",Font.BOLD,24)); } public void start() { // 启动线程 t = new Thread(this); stopFlag = false; t.start();

msg = msg.substring(1, msg.length()); msg += ch; if(stopFlag)break; public void run() { // 跑动banner线程的进入点 char ch; for( ; ; ) { // 显示banner try { repaint(); Thread.sleep(500); ch = msg.charAt(0); msg = msg.substring(1, msg.length()); msg += ch; if(stopFlag)break; } catch(InterruptedException e) {} }

程序的运行结果如下图所示。 public void stop() { // 暂停banner stopFlag = true; t = null; } public void paint(Graphics g){ //显示banner g.drawString(msg, 50, 30); 程序的运行结果如下图所示。

【例11.6】这里再给出一个包含动画线程的Java小程序。动画图片文件存储在源文件所在文件夹的子文件夹images/duke下,文件名为T0.jpg至T14.jpg。 import java.awt.*; import java.awt.image.ImageProducer; import java.applet.Applet; public class ThreadsAnimator extends Applet implements Runnable{ Image images[]; MediaTracker tracker; int index = 0; Thread animator; int maxWidth,maxHeight;

Image offScrImage; Graphics offScrGC; boolean loaded = false; // 初始化Applet public void init(){ tracker = new MediaTracker(this); maxWidth = 100; maxHeight = 100; images = new Image[15]; try{ offScrImage = createImage(maxWidth,maxHeight); // 生成后台缓冲区 offScrGC = offScrImage.getGraphics(); offScrGC.setColor(Color.lightGray); offScrGC.fillRect(0,0,maxWidth,maxHeight); resize(maxWidth,maxHeight);

}catch(Exception e){ e.printStackTrace(); } for(int i = 0;i < 15;i++) { String imageFile = new String("images/Duke/T" + i +".gif"); images[i]=getImage(getDocumentBase(),imageFile): tracker.addImage(images[i],i); try{ tracker.waitForAll(); }catch(InterruptedException e){ } loaded = true;

public void paint(Graphics g){ if(loaded) { g.drawImage(offScrImage,0,0,this); } public void start(){ if(tracker.checkID (index)){ offScrGC.drawImage(images[index],0,0,this); animator = new Thread(this); animator.start(); public void run(){ Thread me = Thread.currentThread();

while((animator != null)&&(animator == me)){ if(tracker.checkID(index)){ offScrGC.fillRect(0,0,100,100); offScrGC.drawImage(images[index],0,0,this); index++; if(index>=images.length){ index = 0; } try{ animator.sleep(200); }catch(InterruptedException e){ } repaint();

本程序使用了双缓冲区技术来消除动画显示的闪烁。程序运行的显示屏幕如下图所示。

11.3 声音 Java支持应用程序和 Applet 中的音频。 它支持下列音频文件格式:WAV 、AIFF和AU(Sun公司支持)。由于AU格式的声音仅有8KHz的采样频率且不支持立体声效果,所以音质不太好。但AU声音文件的尺寸较小,有利于网上传播。 此外,它还支持下列基于 MIDI(Musical Instrument Digital Interface,乐器数字接口)的歌曲文件格式:MIDI TYPE 0、MIDI TYPE 1 和 RMF(Rich Music Format)。

Java语言在Applet类中提供的方法play()可以将指定声音文件的装载和播放一并完成,play()方法的声明如下: public void play(URL url)播放指定绝对地址URL处的声音文件。 public void play(URL url,String name)播放给定URL相对地址和文件名name的声音文件。 其中url参数也经常使用getCodeBase()或getDocument()方法。例如: play(getCodeBase(),"audio.au"); 将加载和播放Applet文件所在目录的声音文件"audio.au"。方法getCodeBase()获取的工作目录正是play()方法需要的。

在AudioClip接口中声明了三个需实现的方法: play()方法只能将声音播放一遍,若想将某声音作为背景声音循环播放,需要用到功能更强的java.applet包中的AudioClip接口,它能更有效地管理声音的播放操作。 (2)AudioClip中的播放声音方法 在AudioClip接口中声明了三个需实现的方法: public void play()开始播放声音文件,每次调用这个方法,都从头开始播放声音文件。 public void loop()在一个循环中开始播放声音文件。 public void stop()停止播放这个声音文件。若未用该方法停止声音的播放,即使离开这一Web页面,声音也不会停止。

【例11.7】在Applet中播放指定URL处的au、wav和mid声音文件。 import java.awt.*; import java.awt.event.*; import java.net.*; import java.applet.*; public class SoundDemo extends Applet{ AudioClip aau; public void init(){ aau = getAudioClip(getDocumentBase(), "spacemusic.au"); this.addMouseListener(new MouseAdpt(this)); }

public void paint(Graphics g){ g.drawString(“鼠标进入显示区播放 spacemusic.au",20,60); g.drawString(“在显示区鼠标按键播放 tada.wav",20,80); g.drawString(“鼠标移出显示区播放 trippygaia1.mid",20,100); } class MouseAdpt extends MouseAdapter{ Applet ap; MouseAdpt(Applet p){ ap = p;

public void mouseEntered(MouseEvent e){ ((SoundDemo)ap).aau.play(); } public void mousePressed(MouseEvent e){ ap.play(ap.getDocumentBase(),"tada.wav"); public void mouseExited(MouseEvent e){ ap.play(ap.getDocumentBase(), "trippygaia1.mid");

程序的运行界面如下图所示。

随着Java 2的引入,应用程序也能用Applet类的newAudioClip()方法装入声音文件并播放声音。该方法的声明如下: 2.在应用程序中播放声音 随着Java 2的引入,应用程序也能用Applet类的newAudioClip()方法装入声音文件并播放声音。该方法的声明如下: public static final AudioClip newAudioClip(URL url) 可用该方法的调用返回值来创建一AudioClip对象。例如: AudioClip au = Applet .newAudioClip( "tada.wav " ); 在创建 AudioClip对象au后,可以对该对象调用接口AudioClip中的play()、loop()以及stop()方法来控制声音文件的播放。若getAudioClip()或 newAudioClip()方法不能找到指定的声音文件, AudioClip对象的值将为空。播放空对象会导致出错,所以标准的过程首先是对该条件进行检测。

【例11.8】在应用程序中播放声音。 import java.net.*; import java.applet.*; import javax.swing.*; import java.awt.*; public class SoundDemo1 extends JPanel{ Applet ap; URL cb; AudioClip aau; JLabel l1 = new JLabel"<html><h3>您欣赏的是\"梁祝.mid\"音乐!" ); SoundDemo1(){ setBackground(Color.white); add(l1);

try { cb = new URL("file:"+System.getProperty "user.dir")+"/梁祝.mid" ); aau = Applet.newAudioClip(cb); aau.play(); }catch (MalformedURLException e){ System.err.println(e.getMessage()); } public static void main(String args[]){ JFrame f = new JFrame("在应用程序中播放声音");

f.getContentPane().add(new SoundDemo1()); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(300,100); f.show(); } 本程序运行时有一界面,在界面上只有一个标签,程序运行后可听到程序指定播放的声音文件“梁祝.mid”的音乐(声音文件存储在源程序文件所在文件夹中),音乐播放或完毕程序将停止音乐的播放。程序未对声音的播放进行控制。