1 /*****************
2 ***第12章 多媒体
3 *******知识点:
4 **************1.文字
5 **************2.图像
6 **************3.声音
7 **************4.视频
8
9 */
10
11 //由于没讲GUI编程,故多媒体这章仅介绍基本使用
12
13 /**1.文字**/
14 //Graphics类:画笔类,用来绘画需要显示的项目到屏幕上
15 /*
16 import java.awt.Image;
17 import java.awt.Graphics;
18 import java.awt.*;
19
20
21
22 public class test12_text extends java.applet.Applet{
23
24 public void paint(Graphics g){
25 g.setColor(Color.RED);//设置画笔颜色为红色
26
27 g.drawLine(10,20,50,5);//在点(10,20)跟点(50,5)之间绘画一条线段
28 g.drawRect(10,60,10,20);//在点(10,60)处绘画一个宽高为(10,20)的矩形 如果宽高一样即为正方形
29 g.drawString("HelloWorld",50,20);//在点(10,80)处画一个字符串
30 g.drawOval(70,30,50,100);//在点(70,30)出绘画非填充一个横轴为50,纵轴为100的椭圆 如果横轴等于纵轴即为圆
31
32 g.fillOval(120,30,50,100);//在点(70,30)出绘画填充一个横轴为50,纵轴为100的椭圆 如果横轴等于纵轴即为圆
33
34 }
35 }
36 更多应用详见API
37 */
38
39 /**2.图像**/
40 //Java目前支持的图像格式为:gif和jpeg两种
41 //提供处理图像的类为:java.awt.Image
42
43 //URL类:用于定位文件的网络位置(也可以是本地),俗称统一资源定位器
44 //1.获取文档目录————————getDocumentBase()
45 //2.获取编码文件目录————getCodeBase()
46
47 //调用Graphics类的drawImage( )方法,它能完成将Image对象中的图像显示在屏幕的特定位置
48 //其中:drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)
49 //img需要绘画的对象,x和y参数是该图像左上角的坐标值,width和height是图像显示的宽度和高度,
50 //observer参数则是一个ImageObserver接口(interface)
51
52 /*
53 import java.awt.Image;
54 import java.awt.Graphics;
55
56
57 public class test12_image extends java.applet.Applet{
58 Image image;
59
60 public void init(){
61 image = getImage(getCodeBase(),"test.gif");
62 }
63 public void paint(Graphics g){
64 int width = image.getWidth(this);
65 int height = image.getHeight(this);
66 g.drawImage(image,20,10,this);//原图
67 g.drawImage(image,200,10,width/2,height/2,this);//缩小一半
68 g.drawImage(image,280,10,width*2,height/2,this);//宽扁平
69 g.drawImage(image,400,10,width/2,height*2,this);//高扁平
70 }
71 }
72
73 //注意会产生闪烁
74 //可用两种方法来减少闪烁(这里不具体演示了,需要用到时找度娘吧)
75 一种是重载update()方法
76 一种是使用双缓冲技术
77 //更多图片应用查看API文档
78 */
79
80
81 /**3.声音**/
82 /*
83 Java目前支持的声音文件格式有:AU格式(.AU文件),也称为u-law格式,AIFF、WAV以及三种MIDI文件格式
84 (MIDI文件类型0、MIDI文件类型1,以及RMF)
85 Java提供两种播放声音的机制:Applet类的play()方法及AudioClip的play()方法
86 1 Applet类的play()方法
87 格式如下:
88 void play(URL url)
89 void play(URL url, String name)
90 2 AudioClip的play()方法
91
92 AudioClip类,它能更有效地管理声音的播放操作
93 因为它被定义在java.applet程序包中,所以需要在程序头部加上:
94 import java.applet.AudioClip;
95 格式如下:
96 AudioClip getAudioClip(URL url)
97 AudioClip getAudioClip(URL url, String name)
98 主要方法
99 loop()循环播放
100 start()开始播放
101 stop()停止播放
102 */
103
104
105 /**4.视频**/
106 //使用JMF(Java Media Frame,简称JMF) 框架实现 //注意导入第三方库包
107 /*
108 import java.awt.BorderLayout;
109 import java.awt.Component;
110 import java.awt.Dimension;
111 import java.awt.Frame;
112 import java.awt.Panel;
113 import java.awt.event.WindowAdapter;
114 import java.awt.event.WindowEvent;
115 import java.io.IOException;
116 import java.net.MalformedURLException;
117 import java.net.URL;
118
119 import javax.media.CannotRealizeException;
120 import javax.media.ControllerEvent;
121 import javax.media.ControllerListener;
122 import javax.media.EndOfMediaEvent;
123 import javax.media.Manager;
124 import javax.media.MediaLocator;
125 import javax.media.NoPlayerException;
126 import javax.media.Player;
127 import javax.media.PrefetchCompleteEvent;
128 import javax.media.RealizeCompleteEvent;
129 import javax.media.Time;
130
131 @SuppressWarnings({ "restriction", "unused" })
132 public class test12_video implements ControllerListener {
133 public static void main(String[] args) {
134 test12_video sp = new test12_video();
135 sp.play();
136 }
137
138 private Player mediaPlayer;
139 private Frame f;
140 private Player player;
141 private Panel panel;
142 private Component visual;
143 private Component control = null;
144
145 public void play(){
146 f = new Frame("JMF Sample1");
147 f.addWindowListener(new WindowAdapter() {
148 public void windowClosing(WindowEvent we) {
149 if(player != null) {
150 player.close();
151 }
152 System.exit(0);
153 }
154 });
155 f.setSize(500,400);
156
157 f.setVisible(true);
158 URL url = null;
159 try {
160 //准备一个要播放的视频文件的URL
161 url = new URL("file:/d:/2.mpg");
162 } catch (MalformedURLException e) {
163 e.printStackTrace();
164 }
165 try {
166 //通过调用Manager的createPlayer方法来创建一个Player的对象
167 //这个对象是媒体播放的核心控制对象
168 player = Manager.createPlayer(url);
169 } catch (NoPlayerException e1) {
170 e1.printStackTrace();
171 } catch (IOException e1) {
172 e1.printStackTrace();
173 }
174
175 //对player对象注册监听器,能噶偶在相关事件发生的时候执行相关的动作
176 player.addControllerListener(this);
177
178 //让player对象进行相关的资源分配
179 player.realize();
180 }
181
182 private int videoWidth = 0;
183 private int videoHeight = 0;
184 private int controlHeight = 30;
185 private int insetWidth = 10;
186 private int insetHeight = 30;
187
188 //监听player的相关事件
189 public void controllerUpdate(ControllerEvent ce) {
190 if (ce instanceof RealizeCompleteEvent) {
191 //player实例化完成后进行player播放前预处理
192 player.prefetch();
193 } else if (ce instanceof PrefetchCompleteEvent) {
194 if (visual != null)
195 return;
196
197 //取得player中的播放视频的组件,并得到视频窗口的大小
198 //然后把视频窗口的组件添加到Frame窗口中,
199 if ((visual = player.getVisualComponent()) != null) {
200 Dimension size = visual.getPreferredSize();
201 videoWidth = size.width;
202 videoHeight = size.height;
203 f.add(visual);
204 } else {
205 videoWidth = 320;
206 }
207
208 //取得player中的视频播放控制条组件,并把该组件添加到Frame窗口中
209 if ((control = player.getControlPanelComponent()) != null) {
210 controlHeight = control.getPreferredSize().height;
211 f.add(control, BorderLayout.SOUTH);
212 }
213
214 //设定Frame窗口的大小,使得满足视频文件的默认大小
215 f.setSize(videoWidth + insetWidth, videoHeight + controlHeight + insetHeight);
216 f.validate();
217
218 //启动视频播放组件开始播放
219 player.start();
220 mediaPlayer.start();
221 } else if (ce instanceof EndOfMediaEvent) {
222 //当播放视频完成后,把时间进度条恢复到开始,并再次重新开始播放
223 player.setMediaTime(new Time(0));
224 player.start();
225 }
226 }
227
228 }
229 */
230
231
232 //部分文档参考于博客:http://blog.csdn.net/a352193394/article/details/6875883