java学习笔记13——多媒体技术
2012-10-17 22:01
471 查看
Java语言不仅支持图形和文本媒体,同样支持图像、声音、动画及视频等其他多媒体,从而大大拓宽了其应用领域,使基于Java的应用更加丰富多彩,更具魅力。
本章讲解Java的多媒体处理方法
一、图像处理
1 图像文件的装载
Java目前只支持两种图像文件格式GIF和JPEG
Java特别提供了java.awt.Image类来处理图像
Java采用URL(Universal Resource Location,统一资源定位器)来定位图像文件的网络位置
1).URL类
一个URL信息可分为两种形式:一种称为绝对URL形式,另一种称为相对URL形式
基准URL(也即绝对URL形式): http://www.xyz.com/java/imgsample/
相对URL: images/m1.gif
2).getImage( )方法
getImage( )方法的调用格式有以下两种
Image getImage(URL url)
Image getImage(URL url, String name)
Applet类中提供了两个方法来帮助我们方便地获取基准URL对象,它们的调用格式如下:
URL getDocumentBase( ) 返回的基准URL对象代表了包含该applet的HTML文件所处的目录
URL getCodeBase( ) 返回的基准URL对象代表了该applet文件(.class文件)所处的目录
2 图像文件的显示
调用Graphics类的drawImage( )方法,它能完成将Image对象中的图像显示在屏幕的特定位置
1)boolean drawImage(Image img, int x, int y, ImageObserver observer)
其中img参数就是要显示的Image对象,x和y参数是该图像左上角的坐标值,observer参数则是一个ImageObserver接口(interface)
2)boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)
这种格式比第一种格式多了两个参数width和height,即表示图像显示的宽度和高度
Image类中的两个方法就可以分别得到原图的宽度和高度:
int getWidth(ImageObserver observer)
int getHeight(ImageObserver observer)
例1 drawImage
运行:appletviewer drawImage.htm
图片为boy.gif
运行结果为:
注意:上面示例中,类必须为public,否则,会出现如下异常:
示例2_对图像剪切:定了三个剪切点,clipExample
二、声音文件的播放
Java目前支持的声音文件格式有:AU格式(.AU文件),也称为u-law格式,AIFF、W***以及三种MIDI文件格式(MIDI文件类型0、MIDI文件类型1,以及RMF)
Java提供两种播放声音的机制:Applet类的play()方法及AudioClip的play()方法
1 Applet类的play()方法
格式如下:
void play(URL url)
void play(URL url, String name)
2 AudioClip的play()方法
AudioClip类,它能更有效地管理声音的播放操作
因为它被定义在java.applet程序包中,所以需要在程序头部加上:
import java.applet.AudioClip;
格式如下:
AudioClip getAudioClip(URL url)
AudioClip getAudioClip(URL url, String name)
主要方法
loop()循环播放
start()开始播放
stop()停止播放
三、用Java实现播放动画
1 线程的使用
通过多线程实现循环,在屏幕上出现的一系列帧来造成运动的效果,从而达到显示动画的目的
2 动画程序的设计步骤
第一步,定义Applet对象的同时定义Runnable接口,这样就可以继承线程的run()方法
第二步,定义Thread对象,即动画线程
第三步,在Applet对象的start()方法中创建一个动画线程并启动它,动画线程自动启动run()方法
第四步,在Applet对象的stop()方法中,可以终止动画线程的执行。
第五步,run()方法包含控制动画的循环,循环一次就调用一次repaint()方法,绘制一幅图像
第六步,改写paint()方法,即此方法中需根据某些变量来进行绘图。 见例13。3
例13.2 AnimationImage.java,当然,要在源代码同下目录下准备有images[number].gif图片
3 动画的闪烁
可用两种方法来减少闪烁,
一种是重载update()方法,
一种是使用双缓冲技术
四、用JMF来播放视频
——关于这方面,据网上说是用JMF已过时了,Oracle已停止支持?不过,在这里将相应资料留下,点击打开链接
参考资料:点击打开链接
———————————————————————————————————http://www.oracle.com/technetwork/cn/java/javase/tech/index-jsp-140239-zhs.html
这种涉及到框架的,框架是另外下的,JMF 下载链接如下————————————————http://www.oracle.com/technetwork/java/javase/download-142937.html
1 什么是JMF(Java Media Frame,简称JMF)
Java媒体框架是一组用来播放、处理和捕捉媒体信息的API
JMF运用RTP实时传输协议
JMF提供了一个三层的体系结构:
第一层为高级表现形式(播放器),作为一个应用程序,用户可通过播放器来收看视频;
第二层为过程处理API;软件开发人员通过高级API进行交互的应用程序的开发;
第三层为低级插入式API。通过一种可以集成到体系结构的插件,为整个体系结构提供一种可扩展的能力
2 播放视频
播放媒体就相应地需要一个播放器 ,一个播放器具有六种状态:
1)Unrealized:当一个播放器已被创建,并对即将要播放的媒体一无所知时的状态。
2)Realizing:调用了播放器的realize方法后,可以判定它的资源的请求。
3)Realized:当Realizing过程结束后进入该状态,此时,已知道需要哪些资源以及将要播放的媒体相关的类型信息。
4)Prefetching:当播放器的prefetch方法被调用后进入该状态,准备播放媒体数据。
5)Prefetched:当播放器的Prefetching操作完成后,进入该状态,此时已准备启动播放。
6)Started:当start方法调用后进入该状态,开始播放
建立一个播放器的主要步骤如下:
① 创建播放器。用javax.media包中的Manager类的createPlayer方法创建一个Player对象。
② 向播放器注册一个控制器。Player提供一个实现ControllerListener接口的事件处理器,该接口有一个方法controllerUpdate(ControllerEvent event),当媒体事件发生时调用此方法。
③ 播放器进行预提取。调用Player类的prefetch()方法。
④ 启动播放器。调用Player类的start()方法。
⑤ 停止播放器。调用Player类的stop()方法。
3 JMF高级功能
JMF除了可以播放媒体外,还可以处理媒体和捕捉媒体。
处理工作包括:与信号分离器、多路复用器、数字信号编/解码器、效果过滤器以及renders相关的工作。处理后的结果可以供用户播放,也可以传送给其他目的地。
本章讲解Java的多媒体处理方法
一、图像处理
1 图像文件的装载
Java目前只支持两种图像文件格式GIF和JPEG
Java特别提供了java.awt.Image类来处理图像
Java采用URL(Universal Resource Location,统一资源定位器)来定位图像文件的网络位置
1).URL类
一个URL信息可分为两种形式:一种称为绝对URL形式,另一种称为相对URL形式
基准URL(也即绝对URL形式): http://www.xyz.com/java/imgsample/
相对URL: images/m1.gif
2).getImage( )方法
getImage( )方法的调用格式有以下两种
Image getImage(URL url)
Image getImage(URL url, String name)
Applet类中提供了两个方法来帮助我们方便地获取基准URL对象,它们的调用格式如下:
URL getDocumentBase( ) 返回的基准URL对象代表了包含该applet的HTML文件所处的目录
URL getCodeBase( ) 返回的基准URL对象代表了该applet文件(.class文件)所处的目录
2 图像文件的显示
调用Graphics类的drawImage( )方法,它能完成将Image对象中的图像显示在屏幕的特定位置
1)boolean drawImage(Image img, int x, int y, ImageObserver observer)
其中img参数就是要显示的Image对象,x和y参数是该图像左上角的坐标值,observer参数则是一个ImageObserver接口(interface)
2)boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)
这种格式比第一种格式多了两个参数width和height,即表示图像显示的宽度和高度
Image类中的两个方法就可以分别得到原图的宽度和高度:
int getWidth(ImageObserver observer)
int getHeight(ImageObserver observer)
例1 drawImage
import java.awt.Image; import java.awt.Graphics; public class drawImage extends java.applet.Applet{//这里的public便不是可有可无了 Image img; public void init(){ img=getImage(getCodeBase(),"boy.gif");//getCodeBase()通过获得本类所在的文件的路径来获得图片的绝对URL } public void paint(Graphics g){ int width=img.getWidth(this); int height=img.getHeight(this); g.drawImage(img,20,10,this);//原图 g.drawImage(img,200,10,width/2,height/2,this);//缩小一半 g.drawImage(img,280,10,width*2,height,this);//宽扁图 g.drawImage(img,400,10,width,height*2,this);//瘦高图 } }其中,html文件为drawImage.htm
<html> <h1>this is an applet of java for Image</h1> <applet code="drawImage" width=750 height=180></applet> </html>编译:javac drawImage.java
运行:appletviewer drawImage.htm
图片为boy.gif
运行结果为:
注意:上面示例中,类必须为public,否则,会出现如下异常:
示例2_对图像剪切:定了三个剪切点,clipExample
import java.awt.*; import java.awt.geom.*; import java.applet.*; public class clipExample extends Applet{ public void paint(Graphics g){ Image img=getImage(getCodeBase(),"boy.gif"); int w=img.getWidth(this); int h=img.getHeight(this); //int w=getSize().width; //int h=getSize().height;//大家可以把这两句换上面两句试试 g.fillRect(0,0,w,h); Polygon p=new Polygon(); p.addPoint(0,0); p.addPoint(w/2,h); p.addPoint(w,0); g.setClip(p); g.drawImage(img,0,0,this); } }
二、声音文件的播放
Java目前支持的声音文件格式有:AU格式(.AU文件),也称为u-law格式,AIFF、W***以及三种MIDI文件格式(MIDI文件类型0、MIDI文件类型1,以及RMF)
Java提供两种播放声音的机制:Applet类的play()方法及AudioClip的play()方法
1 Applet类的play()方法
格式如下:
void play(URL url)
void play(URL url, String name)
2 AudioClip的play()方法
AudioClip类,它能更有效地管理声音的播放操作
因为它被定义在java.applet程序包中,所以需要在程序头部加上:
import java.applet.AudioClip;
格式如下:
AudioClip getAudioClip(URL url)
AudioClip getAudioClip(URL url, String name)
主要方法
loop()循环播放
start()开始播放
stop()停止播放
三、用Java实现播放动画
1 线程的使用
通过多线程实现循环,在屏幕上出现的一系列帧来造成运动的效果,从而达到显示动画的目的
2 动画程序的设计步骤
第一步,定义Applet对象的同时定义Runnable接口,这样就可以继承线程的run()方法
第二步,定义Thread对象,即动画线程
第三步,在Applet对象的start()方法中创建一个动画线程并启动它,动画线程自动启动run()方法
第四步,在Applet对象的stop()方法中,可以终止动画线程的执行。
第五步,run()方法包含控制动画的循环,循环一次就调用一次repaint()方法,绘制一幅图像
第六步,改写paint()方法,即此方法中需根据某些变量来进行绘图。 见例13。3
例13.2 AnimationImage.java,当然,要在源代码同下目录下准备有images[number].gif图片
import java.awt.*; import java.applet.*; public class AnimationImage extends Applet implements Runnable{ Image imageFrame[]; public Thread animationRunner; public int frame_i=0; public void init() { int i=0; imageFrame=new Image[5]; for(i=0;i<imageFrame.length;i++){ imageFrame[i]=getImage(getCodeBase(),"images"+i+".gif"); } } public void start(){ if(animationRunner==null){ animationRunner=new Thread(this); animationRunner.start(); } } public void stop(){ if(animationRunner!=null){ //animationRunner.stop();//已过时 animationRunner=null; } } public void run(){ while(Thread.currentThread()==animationRunner){ repaint();//No.1 statement try{ Thread.sleep(500);//wait } catch(InterruptedException e){ } frame_i=(frame_i+1)%imageFrame.length;//in order to repaint }//end of while } public void paint(Graphics g){ g.drawImage(imageFrame[frame_i],0,0,this); } }下面是:AnimationImage.htm
<html> <body> <h1>This is an applet for Animation with images</h1> <applet code="AnimationImage" width="180" height="80"></applet> <body> </html>
3 动画的闪烁
可用两种方法来减少闪烁,
一种是重载update()方法,
一种是使用双缓冲技术
四、用JMF来播放视频
——关于这方面,据网上说是用JMF已过时了,Oracle已停止支持?不过,在这里将相应资料留下,点击打开链接
参考资料:点击打开链接
———————————————————————————————————http://www.oracle.com/technetwork/cn/java/javase/tech/index-jsp-140239-zhs.html
这种涉及到框架的,框架是另外下的,JMF 下载链接如下————————————————http://www.oracle.com/technetwork/java/javase/download-142937.html
1 什么是JMF(Java Media Frame,简称JMF)
Java媒体框架是一组用来播放、处理和捕捉媒体信息的API
JMF运用RTP实时传输协议
JMF提供了一个三层的体系结构:
第一层为高级表现形式(播放器),作为一个应用程序,用户可通过播放器来收看视频;
第二层为过程处理API;软件开发人员通过高级API进行交互的应用程序的开发;
第三层为低级插入式API。通过一种可以集成到体系结构的插件,为整个体系结构提供一种可扩展的能力
2 播放视频
播放媒体就相应地需要一个播放器 ,一个播放器具有六种状态:
1)Unrealized:当一个播放器已被创建,并对即将要播放的媒体一无所知时的状态。
2)Realizing:调用了播放器的realize方法后,可以判定它的资源的请求。
3)Realized:当Realizing过程结束后进入该状态,此时,已知道需要哪些资源以及将要播放的媒体相关的类型信息。
4)Prefetching:当播放器的prefetch方法被调用后进入该状态,准备播放媒体数据。
5)Prefetched:当播放器的Prefetching操作完成后,进入该状态,此时已准备启动播放。
6)Started:当start方法调用后进入该状态,开始播放
建立一个播放器的主要步骤如下:
① 创建播放器。用javax.media包中的Manager类的createPlayer方法创建一个Player对象。
② 向播放器注册一个控制器。Player提供一个实现ControllerListener接口的事件处理器,该接口有一个方法controllerUpdate(ControllerEvent event),当媒体事件发生时调用此方法。
③ 播放器进行预提取。调用Player类的prefetch()方法。
④ 启动播放器。调用Player类的start()方法。
⑤ 停止播放器。调用Player类的stop()方法。
3 JMF高级功能
JMF除了可以播放媒体外,还可以处理媒体和捕捉媒体。
处理工作包括:与信号分离器、多路复用器、数字信号编/解码器、效果过滤器以及renders相关的工作。处理后的结果可以供用户播放,也可以传送给其他目的地。
import java.awt.*; import java.awt.event.*; import javax.media.*; class player extends Frame implements ControllerListener { Player p; Component vc; player(String ss,String mediaurl) { super(ss); try { p = Manager.createPlayer(new MediaLocator( mediaurl)); } catch (NoPlayerException e) { System.out.println("could not find a player."); System.exit(-1); } catch (java.io.IOException e) { System.out.println(e); System.exit(-1); } if(p == null) {System.out.println("trouble crating player."); System.exit(-1);} p.addControllerListener(this); p.prefetch(); } public synchronized void controllerUpdate(ControllerEvent event) { if (event instanceof EndOfMediaEvent) { p.setMediaTime(new Time(0)); p.start(); return; } if (event instanceof PrefetchCompleteEvent) { p.start(); return; } if (event instanceof RealizeCompleteEvent) { vc=p.getVisualComponent(); if (vc != null){ add(vc);} pack(); setResizable(false); setVisible(true); } } public static void main(String args[]) { if(args.length != 1) {System.out.println("error url"); return;} player nowFrame=new player("player example1",args[0]); nowFrame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } }
相关文章推荐
- Java核心技术(第8版)学习笔记_集合
- java学习笔记 第二篇 核心技术
- Java核心技术 卷1 (第十版)学习笔记
- java学习笔记13
- 黑马程序员________Java中IO技术字节流字符流的应用及File类学习笔记
- Java核心技术(第8版)学习笔记_接口与内部类
- 黑马程序员________Java中IO技术其他常用流对象学习笔记
- 高手Java核心技术学习笔记
- java学习笔记—Servlet技术(11)
- 13. Java类集 Part 2(Map接口、SortedMap接口、集合工具类Collection、Stack类、属性类Properties) ----- 学习笔记
- Java学习笔记13——Swing开发GUI程序
- JVM学习笔记-JAVA技术体系
- (13)Java学习笔记——面向对象07——多态
- Hibernate学习笔记---1.java对象持久化技术
- Java学习笔记13
- 我的java学习笔记(13)关于反射(part 2)
- JAVA学习笔记13:IO&类集
- 【分享】高手Java核心技术学习笔记
- Java核心技术学习笔记
- Java核心技术学习笔记之一:Java的基本程序设计结构