第12章 多媒体

  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
原文地址:https://www.cnblogs.com/ciade/p/4772468.html