第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