Java程序設計電子教案第九章.ppt_第1頁
Java程序設計電子教案第九章.ppt_第2頁
Java程序設計電子教案第九章.ppt_第3頁
Java程序設計電子教案第九章.ppt_第4頁
Java程序設計電子教案第九章.ppt_第5頁
已閱讀5頁,還剩55頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第9章java多媒體設計,9.1圖形處理9.2圖像處理9.32D圖像9.4動畫處理9.5播放聲音,9.1圖形處理,Java所有與圖形有關的功能都包含在AWT包里。AWT(AbstractWindowsToolkit)是抽象窗口工具包的縮寫,支持窗口界面的創(chuàng)建、簡單圖形的繪制、圖形化文本輸出和事件監(jiān)聽。用戶可利用AWT提供的類和方法,在窗口上繪制各種各樣的圖形和文本,增加界面的美觀?;緢D形包括點、線、圓、矩形等,是構成復雜圖形的基礎。繪制基本圖形要使用AWT中的Graphics類,它提供了各種基本圖形的繪制方法。,下一頁,返回,9.1圖形處理,911直線publicvoiddrawLine(intx1,inty1,intx2,inty2)參數(x1,y1)和(x2,y2)是所畫直線的兩個端點坐標。方法的功能是:在點(x1,y1)和(x2,y2)之間畫直線。在窗口上隨機繪制10條直線。/DrawLines.javaimportjava.applet.*;importjava.awt.*;importjava.lang.*;publicclassDrawLinesextendsAppletpublicvoidpaint(Graphicsg),上一頁,下一頁,返回,9.1圖形處理,inti,x1,y1,x2,y2;for(i=1;i=10;i+)x1=(int)(Math.random()*10);y1=(int)(Math.random()*200);x2=(int)(Math.random()*380);y2=(int)(Math.random()*200);g.drawLine(x1,y1,x2,y2);,上一頁,下一頁,返回,9.1圖形處理,根據題目的要求,我們使用一組隨機數來指定直線兩個端點的坐標,并采用循環(huán)結構實現10次循環(huán)。drawLine方法中的4個整型參數代表直線兩個端點的坐標。random()是Math類中的一個方法,該方法返回一個double值,值域為(00,10)。Math類是java1ang包的一部分java1ang可由編譯器自動引入,所以我們不必把Math類引入到程序中。直接調用random方法得到返回值太小,在實際應用中往往乘以一個整數因子,并強制類型轉換為一個合適的整數。如(int)(Mathrandom()x100)的實際取值范圍為0,100。在圖形方式下要想準確定位,必須了解屏幕坐標系的構成。Java定義一個窗口工作區(qū)的左上角為坐標原點(o,o),以像素點為單位,順序向右和向下延伸。圖形的大小如超過窗口,則超出部分不會顯示出來。,上一頁,下一頁,返回,9.1圖形處理,9.1.2設置顏色.創(chuàng)建Color類的一個對象(1)publicColor(intr,intg,intb)整數r,g,b分別表示紅,綠,藍的含量(2)publicColor(intr,intg,intb,inta);整數a表示alpha值,它們的取值為0到255。(3)publicColor(floatr,floatg,floatb)單精度浮點數r,g,b分別表示紅,綠,藍的含量(4)publicColor(floatr,floatg,floatb,floata)單精度浮點數a表示alpha值,它們的取值范圍是0.0f到1.0f,上一頁,下一頁,返回,9.1圖形處理,(5)publicColor(intrgb)整型參數rgb指明紅(1623bits表示)綠(815bits表示)藍(07bits表示)三色的取值。(1)使用Graphics類中方法:publicvoidsetColor(Colorc)設置顏色。(2)使用Color類的以下幾個方法獲取顏色對象:publicColorgetColor();返回當前顏色對象。publicintgetRed();得到顏色對象的red分量。publicintgetGreen();得到顏色對象的green值。publicintgetBlue();得到顏色對象的blue值。publicintgetAlpha();得到顏色對象的alpha值。,上一頁,下一頁,返回,9.1圖形處理,/TestColor.Javaimportjava.applet.Applet;importjava.awt.Graphics;importjava.awt.Font;importjava.awt.Color;publicclassTestColorextendsAppletpublicvoidpaint(Graphicsg),上一頁,下一頁,返回,9.1圖形處理,Strings=中國北京;Colorc1=newColor(255,0,0);Colorc2=newColor(255,0,0,128);Colorc3=Color.blue;g.setColor(c1);g.drawString(紅色:+s,20,20);g.setColor(c2);g.drawString(紅色:+s,20,40);g.setColor(c3);g.drawString(藍色:+s,20,60);,上一頁,下一頁,返回,9.1圖形處理,9.1.3字符數組和字節(jié)數組的顯示Graphics類的以下方法顯示字符串、字符數組和字節(jié)數組:(1)繪制字符串voiddrawString(Stringstring,intx,inty)坐標點(x,y)與要繪制的字符串string左下角相對應。(2)繪制字符數組voiddrawChars(charchars,intoffset,intnumber,intx,inty)offset是數組的起始下標,number是要繪制的元素個數。(3)繪制字節(jié)數組voiddrawBytes(bytebytes,intoffset,intnumber,intx,inty)offset是數組的起始下標,number是要繪制的元素個數。,上一頁,下一頁,返回,9.1圖形處理,/DrawCharByte.javaimportjava.applet.*;importjava.awt.*;publicclassDrawCharByteextendsAppletpublicvoidinit()setBackground(newColor(0,128,0);publicvoidpaint(Graphicsg)g.setFont(newFont(華文行楷,Font.BOLD,40);,上一頁,下一頁,返回,9.1圖形處理,Strings=中國北京;charch=newchars.length();s.getChars(0,4,ch,0);g.setColor(Color.red);g.drawChars(ch,2,2,20,40);bytebyt=65,66,67,68,69,70,71,72,73,74,75;g.setFont(newFont(Arial,Font.ITALIC,30);g.setColor(Color.red);g.drawBytes(byt,0,5,120,40);g.setColor(Color.white);g.drawBytes(byt,0,5,122,38);,上一頁,下一頁,返回,9.1圖形處理,9.1.4繪制Rectangle(1)畫矩形:publicvoiddrawRect(intx,inty,intwidth,intheight);x,y是矩形左上角坐標;width,heigh是矩形的寬度和高度。(2)用當前設置的顏色畫填充矩形:publicvoidfillRect(intx,inty,intwidth,intheight);(3)清除指定的矩形區(qū)域,該區(qū)域顏色將為背景顏色:publicvoidclearRect(intx,inty,intwidth,intheight);,上一頁,下一頁,返回,9.1圖形處理,(4)畫圓角矩形:publicvoiddrawRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight);publicvoidfillRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight);前4個參數的含義同上;arcWidth-水平方向圓弧的總寬度;arcHeight-垂直方向圓弧的總高度。,上一頁,下一頁,返回,9.1圖形處理,/DrawRectangle.javaimportjava.applet.*;importjava.awt.*;publicclassDrawRectangleextendsAppletpublicvoidpaint(Graphicsg)setBackground(Color.cyan);g.setColor(Color.blue);g.fillRect(20,20,40,40);/為了演示clearRect()方法的效果,先畫一個比清除的區(qū)域大2個像素的填充矩形。g.fillRect(79,19,42,42);,上一頁,下一頁,返回,9.1圖形處理,g.clearRect(80,20,40,40);g.fillRoundRect(140,20,40,40,40,40);9.1.5繪制橢圓和弧(1)畫橢圓publicvoiddrawOval(intx,inty,intwidth,intheight);publicvoidfillOval(intx,inty,intwidth,intheight);(2)畫圓弧畫圓弧就是畫部分橢圓的圓弧和填充扇形。,上一頁,下一頁,返回,9.1圖形處理,publicvoiddrawArc(intx,inty,intwidth,intheight,intstartAngle,intarcAngle)publicvoidfillArc(intx,inty,intwidth,intheight,intstartAngle,intarcAngle)startAngle是弧的起始角度;arcAngle表示從起始角度算起轉多少度,逆時針為正。畫橢圓的方法drawOval(),fillOval具有相同的參數,前兩個參數用來定位,實際指定的是包圍橢圓的矩形的左上角位置,后2個參數指定了橢圓的寬度和高度,如果取相同值,則畫出的是正圓。drawArc方法可畫圓弧,fillArc方法實際畫出的是扇形。圓弧是橢圓的一部分,夾在兩個角之間,因此畫圓弧的方法比畫橢圓的方法多了兩個參數:起始角和張角(以角度為單位)。起始角確定了圓弧的起始位置;張角確定了圓弧的大小,取正(負)值為沿逆(順加寸針方向畫出圓弧。當張角取值大于360時,畫出的就是橢圓。我們用一個例子來說明這兩個方法的使用。,上一頁,下一頁,返回,9.1圖形處理,/DrawOval.javaimportjava.applet.*;importjava.awt.*;publicclassDrawOvalextendsAppletpublicvoidpaint(Graphicsg)g.setColor(Color.blue);g.drawRect(20,20,100,60);g.fillOval(20,20,100,60);g.drawOval(140,20,100,60);g.fillArc(140,20,100,60,0,60);,上一頁,下一頁,返回,9.1圖形處理,9.1.6畫多邊形將多邊形的各個頂點的坐標對應放到整型數組xPoints(x坐標)和整型數組yPoints(y坐標)中,用以下方法畫多邊形和填充多邊形:publicvoiddrawPolygon(intxPoints,intyPoints,intpoints);publicvoidfillPolygon(intxPoints,intyPoints,intpoints);參數points表示頂點的個數。創(chuàng)建Polygon類的對象p畫多邊形Polygon類的構造函數:,上一頁,下一頁,返回,9.1圖形處理,Polygon();Polygon(intxPoints,intyPoints,intpoints);畫多邊形publicvoiddrawPolygon(Polygonp);publicvoidfillPolygon(Polygonp);追加頂點坐標的方法:publicvoidaddPoint(intx,inty)。/DrawPolygon.javaimportjava.applet.*;importjava.awt.*;publicclassDrawPolygonextendsApplet,上一頁,下一頁,返回,9.1圖形處理,publicvoidpaint(Graphicsg)intx=20,40,80,100,80,40;inty=40,20,20,40,60,60;g.setColor(Color.blue);g.fillPolygon(x,y,6);intx1=140,160,200,220,200,160;inty1=40,20,20,40,60,60;Polygonp=newPolygon(x1,y1,6);g.fillPolygon(p);,上一頁,下一頁,返回,9.1圖形處理,多邊形的多邊是分別用兩個整數數組來表示x坐標和y坐標的,并用一個整數表示多邊的頂點數,多邊形可以說是封閉的,也可以是開放的,取決于最后一條直線終點坐標的取值,若和第一條直線的起點坐標重合畫出的多邊形為封閉的,否則為開放的。,上一頁,返回,9.2圖像處理,/ShowImage.Javaimportjava.applet.*;importjava.awt.*;publicclassShowImageextendsAppletpublicvoidpaint(Graphicsg)Imagepic=getImage(getDocumentBase(),a.jpg);intw=pic.getWidth(this),h=pic.getHeight(this),d=5;,下一頁,返回,9.2圖像處理,g.drawImage(pic,0,0,w,h,this);/按原圖寬高顯示g.drawImage(pic,w+d,0,w/2,h/2,this);/縮小為原圖寬高的一半并顯示/截取原圖右下角的1/4并顯示g.drawImage(pic,w+d,h/2,w+w/2+d,h,w/2,h/2,w,h,this);,上一頁,下一頁,返回,9.2圖像處理,我們以這個程序為例,總結出在Java程序中顯示一幅圖像的步驟。圖像顯示分為兩個步驟:首先加載圖像(即將圖像文件讀入內存),然后畫出圖像。程序創(chuàng)建了一個Image對象img,通過Applet的getlmage方法加載圖像文件ajpg,將它和img聯(lián)系起來。然后通過Graphics的drawlmage方法顯示圖像。加載圖像加載圖像一般放在初始化方法init中進行。程序中的getlmage方法可加載Java支持的圖像文件,它有兩個參數,一個是圖像文件地址,一個是圖像文件名稱。由于Applet是面向網絡的,因此圖像文件的存儲位置并不局限于本地計算機的磁盤目錄,大部分情況是直接讀取Web服務器上的圖像文件。getlmage方法返回一個Image對象,它的調用格式為:,上一頁,下一頁,返回,9.2圖像處理,Imagegetlmage(URLurl)Imagegetlmage(URLurl,Stringname)其中url是一個URL類的對象,J代表一個網絡地址,例如下面的語句可以加載sun公司Web服務器指定位置上的一幅圖片:getlmage(newURL(http:jaVaskincomgraphicspeoplegif”);上述程序中沒有直接給出一個具體網絡地址,因為在不熟悉網站的情況下讀取圖像文件是毫無意義的。另一方面,設計Applet一般是為了顯示自己已經準備好的圖像,所以程序使用了getCodeBase方法。getCodeBase返回的是Applet文件所在的地址,即該文件所在的目錄,我們是把圖像文件和Applet文件放在同一個目錄下的,這樣就能保證程序找到該圖像文件。另外,使用getDocumentBase方法也可以達到同樣目的。,上一頁,下一頁,返回,9.2圖像處理,2、顯示圖像顯示圖像需要調用Graphics類的方法drawlmage,它可以將Image對象關聯(lián)的圖像顯示在Applet的指定位置。drawlmage方法的調用格式如下:booleandrawlmage(1mageimg,intx,inty,ImageObserverobserver)booleandrawlmage(1mageimg,intx,inty,Colorbgcolor,ImageObserverobserver)其中img就是要顯示的圖像,x和y是圖像顯示位置(x和y可取負值,表示一部分圖像被移出了顯示區(qū))、bgcolor是圖像顯示區(qū)域的背景色、observer是圖像加載跟蹤器,通常將該參數指定為this,即由Applet負責跟蹤圖像的加載情況。這兩種方法都是將圖像照原樣顯示,能不能對圖像進行縮放呢?使用下面兩種調用格式就可以對圖像進行縮放顯示:booleandrawlmage(1mageimg,intx,inty,intwidth,intheight,ImageObserverObserver),上一頁,返回,9.32D圖像,畫圖類Graphics2D:更強大的圖形處理功能。它是Graphics類的子類。Graphics2Dg2d=(Graphics2D)g;1創(chuàng)建各種圖形對象java.awt.geom包中提供了很多構造圖形對象的類。直線:Line2Dline=newLine2D.Double(20.0,20.0,320.0,20.0);起點在(20.0,20.0),終點在(320.0,20.0)。長方形:,下一頁,返回,9.32D圖像,Rectangle2Drect=newRectangle2D.Double(20.0,30.0,90.0,60.0);左上角坐標為(20.0,30.0),寬、高分別為90.0和60.0橢圓:Ellipse2Dellipse=newEllipse2D.Double(220.0,30.0,90.0,60.0);2改變繪圖時畫筆的大小創(chuàng)建BasicStroke類對象,并使用Graphics2D類的方法:setStroke(BasicStrokebstroke)可以改變畫筆線條的寬度。,上一頁,下一頁,返回,9.32D圖像,例如,下面的語句設置畫筆線條的寬度為3像素:BasicStrokebstroke=newBasicStroke(3.0f);g2d.setStroke(bstroke);/Draw2D.javaimportjava.applet.*;importjava.awt.*;importjava.awt.geom.*;publicclassDraw2DextendsAppletpublicvoidpaint(Graphicsg),上一頁,下一頁,返回,9.32D圖像,Graphics2Dg2d=(Graphics2D)g;/把父類對象強制轉化為子類對象BasicStrokebstroke=newBasicStroke(3.0f);/畫筆線條的寬度g2d.setStroke(bstroke);Line2Dline=newLine2D.Double(20.0,20.0,320.0,20.0);g.setColor(Color.blue);g2d.draw(line);g.setColor(Color.red);Rectangle2Drect=newRectangle2D.Double(20.0,30.0,90.0,60.0);g2d.draw(rect);RoundRectangle2Dr_rect=new,上一頁,下一頁,返回,9.32D圖像,RoundRectangle2D.Double(120.0,30.0,90.0,60.0,50.0,25.0);g2d.draw(r_rect);Ellipse2Dellipse=newEllipse2D.Double(220.0,30.0,90.0,60.0);g2d.draw(ellipse);用漸變顏色畫填充圖形1.java.awt包中類GradientPaint的構造方法:publicGradientPaint(floatx1,floaty1,Colorcolor1,floatx2,floaty2,Colorcolor2);,上一頁,下一頁,返回,9.32D圖像,可創(chuàng)建漸變顏色。前三個參數指定坐標點(x1,y1)的顏色為color1;后三個參數指定坐標點(x2,y2)的顏色為color2;它們之間的顏色由color1漸變到color2。2.通過Graphics2D類的方法:setPaint(GradientPaintgradColor)設置畫圖顯示的顏色為漸變色。如何創(chuàng)建和設置漸變色,上一頁,下一頁,返回,9.32D圖像,/Draw2DFill.Javaimportjava.applet.*;importjava.awt.*;importjava.awt.geom.*;publicclassDraw2DFillextendsAppletpublicvoidpaint(Graphicsg),上一頁,下一頁,返回,9.32D圖像,Graphics2Dg2d=(Graphics2D)g;/把父類對象強制轉化為子類對象GradientPaintgradColor=newGradientPaint(0.0f,0.0f,Color.blue,200.0f,0.0f,Color.green);g2d.setPaint(gradColor);Rectangle2Drect=newRectangle2D.Double(0.0,0.0,200.0,60.0);g2d.fill(rect);,上一頁,下一頁,返回,9.32D圖像,java.awt.geom包中提供了AffineTransform類,實現圖象的平移、縮放和旋轉等功能。1.圖形的平移publicvoidtranslate(doubletx,doublety);參數tx指定圖形水平方向平移的像素值;參數ty指定圖形垂直方向平移的像素值。2.圖形的旋轉publicvoidrotate(doubletheta,doublex,doubley);第一個參數指定順時針方向轉過的角度,以弧度為單位;參數x和y指定平面圖形轉動的軸點。,上一頁,下一頁,返回,9.32D圖像,3.圖形的縮放publicvoidscale(doublesx,doublesy);參數sx和sy分別表示x方向和y方向的縮放因子(倍數)。/Draw2DTransform.javaimportjava.applet.*;importjava.awt.*;importjava.awt.geom.*;publicclassDraw2DTransformextendsAppletpublicvoidpaint(Graphicsg),上一頁,下一頁,返回,9.32D圖像,Graphics2Dg2d=(Graphics2D)g;/把父類對象強制轉化為子類對象BasicStrokebstroke=newBasicStroke(2.0f);g2d.setStroke(bstroke);/設置畫筆畫線的寬度g2d.setColor(Color.blue);AffineTransformtransf=newAffineTransform();QuadCurve2DquadCurve=newQuadCurve2D.Double(20.0,20.0,60.0,15.0,80.0,80.0);g2d.draw(quadCurve);,上一頁,下一頁,返回,9.32D圖像,transf.translate(100.0,0.0);doublerad=Math.toRadians(360.0/30);for(inti=0;i30;i+)transf.rotate(rad,80.0,80.0);g2d.setTransform(transf);g2d.draw(quadCurve);,上一頁,下一頁,返回,9.32D圖像,transf.scale(2,2);transf.translate(100.0,0.0);for(inti=0;i30;i+)transf.rotate(rad,80.0,80.0);g2d.setTransform(transf);g2d.draw(quadCurve);,上一頁,返回,9.4動畫處理,動畫是指連續(xù)而平滑地顯示多幅圖像。動畫的質量一方面取決于圖像的質量,另一方面則取決于平滑程度。在計算機上,以10一30幅每秒鐘的速度顯示動畫即可達到滿意的動畫質量。在很多軟件尤其是游戲軟件的設計中,動畫向程序員提出了挑戰(zhàn),但在java中實現動畫則是十分簡單的事情。下面讓我們一起由淺人深地編寫幾個動畫程序實例,并通過對這些實例的逐步改進來探討Java動畫技術的關鍵。,下一頁,返回,9.4動畫處理,9.41動畫原理其實,計算機動畫原理十分簡單,首先在屏幕上顯示出第一幀畫面,過一會兒把它擦掉,然后再顯示下一幀畫面,如此循環(huán)往復。由豐人眼存在著一個視覺差,所以感覺好像畫面中的物體在不斷運動。/MovingImg.javaimportjava.awt.*;importjava.applet.*;publicclassMovingImgextendsAppletImagestar,messenger_big;intx=10;publicvoidinit(),上一頁,下一頁,返回,9.4動畫處理,star=getImage(getCodeBase(),merlin.gif);messenger_big=getImage(getCodeBase(),messenger_big.gif);publicvoidpaint(Graphicsg)g.drawImage(star,0,0,this);g.drawImage(messenger_big,x,15,this);tryThread.sleep(50);x+=5;if(x=210)x=10;Thread.sleep(1000);catch(InterruptedExceptione),上一頁,下一頁,返回,9.4動畫處理,repaint();這是一個很簡單的動畫,在Applet中有一個小人,一個windowsmessage的圖標上不斷從左邊移動到右邊。程序中創(chuàng)建了兩個Image對象star和messenger_big,在init方法中分別加載了兩個圖像文件和這兩個對象關聯(lián)起來。添加了變量x用來指定飛船的畫出位置,x初始化為l0。在paint方法中,注意到Applet中總是畫在指定位置(x,10),而另一個則畫在位置(x,15),其中x的值是不斷變化的。,上一頁,下一頁,返回,9.4動畫處理,真正使圖標實現動畫效果是在trycatch塊中。程序調用了sleep方法,它是Thread類中定義的一個類方法,調用它可使程序休眠指定的毫秒數。sleep方法會產生中斷異常,因此必須放在trycatch塊中。如果不調用sleep方法,程序將全速運行,必將導致?lián)Q幀速度太快,畫面閃爍嚴重。休眠時間設定為50毫秒,相當于換幀速度20(100050)。休眠結束后x的值加5,意味著下一幀圖標畫面的顯示位置向右移動5個點。當飛船移動到最右邊即210點位置時,將x賦值10,圖標重新回到了左邊,這是在語句中實現的。paint方法的最后一條語句是調用repaint方法。repaint方法的功能是重畫圖像,它先調用update方法將顯示區(qū)清空,再調用paint方法畫出圖像。這就形成了一個循環(huán),paint調用了repaint,而repaint又調用了paint,使圖標不間斷地來回移動。,上一頁,下一頁,返回,9.4動畫處理,運行這個Applet時,畫面有閃爍現象。一般來說,畫面越大,update以背景色清除顯示區(qū)所占用的時間就越長,不可避免地會產生閃爍。為了達到平滑而又沒有閃爍的動畫效果,就應該考慮采取一些補救措施。覆蓋update方法可以降低閃爍,但不能消除它。能有效消除閃爍的方法是采用圖形雙緩沖技術(graphicsdoublebuffering),請看下面改進后的程序。/MovingImg1.javaimportjava.applet.*;importjava.awt.*;,上一頁,下一頁,返回,9.4動畫處理,publicclassMovingImg1extendsAppletImagestar,messenger_big,buffer;GraphicsgContext;intx=10;publicvoidinit()star=getImage(getCodeBase(),a.jpg);messenger_big=getImage(getCodeBase(),messenger_big.gif);buffer=createImage(getWidth(),getHeight();gContext=buffer.getGraphics();,上一頁,下一頁,返回,9.4動畫處理,publicvoidpaint(Graphicsg)gContext.drawImage(star,0,x,this);gContext.drawImage(messenger_big,x,15,this);g.drawImage(buffer,0,0,this);tryThread.sleep(100);x+=2;if(x=210)x=10;Thread.sleep(1000);,上一頁,下一頁,返回,9.4動畫處理,catch(InterruptedExceptione)repaint();publicvoidupdate(Graphicsg)paint(g);,上一頁,下一頁,返回,9.4動畫處理,改進后的程序比原程序增加了buffer和gContext對象,覆蓋了update方法。換幀速度提高到100(100010),飛船每次移動2個點,動畫效果更加平滑而且無閃爍。buffer是新增的Image對象,用作屏幕緩沖區(qū)。gContext是新增的Graphics對象,代表著一個圖形上下文即繪圖區(qū)。在init方法中,程序調用createlmage方法,按照Applet的寬度和高度創(chuàng)建了屏幕緩沖區(qū),然后調用getGraphics方法創(chuàng)建了buffer的繪圖區(qū)。paint方法改變了圖像輸出方向,兩個圖像都被畫在屏幕緩沖區(qū)內。由于屏幕緩沖區(qū)不可見,使得畫面交替時的閃爍現象也不可見。當屏幕緩沖區(qū)上的畫圖完成以后,再調用的drawImage方法將整個屏幕緩沖區(qū)拷貝到屏幕上,這個過程是直接覆蓋,不會產生閃爍。注:這里將merlin.gif改為a.jpg作為背景,以更新覆蓋。,上一頁,返回,9.5播放聲音,JDKl3新增了一個功能強大的數字音頻類庫javaxsound,使Java程序能錄制、處理和播放聲音和MIDI音頻數據。限于篇幅,本節(jié)僅介紹如何利用Applet播放各種聲音剪輯。-9.5.1加載聲音文件Java開發(fā)工具JDKl早比以前版本支持更多的聲音格式,共有5種:AIFF、AU、WAV、MIDI、RMF。音質可為8位或16位的單聲道和立體聲,采樣頻率從8kHz到48kHz。當然音質越好占用的資源就越多,網絡下載時間就越長。對于面向網絡的Applet來說,必須考慮聲音文件的大小,需要在音質和文件大小之間采取折衷辦法。,下一頁,返回,9.5播放聲音,在Applet中播放聲音十分簡單,加載聲音文件,然后調用play方法播放即可。Java提供了兩種播放聲音的方式:一種是通過Applet類的play方法,一種是通過AudioClip接口中的方法來播放。Applet的play方法可以將聲音文件的加載與播放一并完成,其調用格式如下:voidplay(URLurl)voldplay(URLurl,Stringname)其中URI。是一個網絡地址,網絡地址若包含聲音文件可采用第一種形式,否則采用第二種形式,播放本地計算機上的聲音文件也可采用第二種形式。假設有一個MIDI聲音文件tripmid和Applet放在同一個目錄下,采用如下調用格式即可播放:play(getCodeBase(),”onestop.mid”);,上一頁,下一頁,返回,9.5播放聲音,一旦play方法加載了該聲音文件,就立即播放。如果找不到指定的聲音文件,不會產生異常,只是聽不到聲音而已。然而,這種播放是一次性的,若要重播必須重新加載聲音文件。如果你想把一個聲音文件作為背景音樂連續(xù)播放,就需要引入功能更強的AudioClip接口,它包含在javaapplet類庫中,程序應引入importjava.Applet.AudioClip。聲音文件的加載在創(chuàng)建AudioClip對象的過程中實現。Applet的getAudioClip方法可創(chuàng)建這樣的對象,該方法加載指定網絡地址的聲音文件,并返回一個

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論