




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第9章 多媒體與圖形學(xué)程序設(shè)計(jì)JAVA授課教師:趙小敏浙江工業(yè)大學(xué) 軟件學(xué)院Java程序設(shè)計(jì)功駕咽役秤捆擔(dān)膜邊鉤槍樹(shù)倦實(shí)常冗優(yōu)宵俯蹤敖熙刑遁容倡擂妖顆滬憲鈕chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming第9章 多媒體與圖形學(xué)程序設(shè)計(jì)主要內(nèi)容:一、聲音播放二、圖像顯示三、圖形處理四、動(dòng)畫(huà)處理廢敖爭(zhēng)轅龐同咽辰推陵屎遁您傍踞舉聲梁減異牲跨碗槐轉(zhuǎn)橢腫喻矯淆正向chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Pro
2、gramming一、聲音播放1、加載聲音文件在Applet中播放聲音十分簡(jiǎn)單,加載聲音文件,然后調(diào)用play方法播放即可。Java提供了兩種播放聲音的方式:一種是通過(guò)Applet類(lèi)的play方法,一種是通過(guò)AudioClip接口中的方法來(lái)播放。Applet的play方法可以將聲音文件的加載與播放一并完成,其調(diào)用格式如下: void play(URL url) void play(URL url, String name)捐蚊揩盂導(dǎo)腔針構(gòu)酚羹野闌縷泛米胸寡封訖勝較循碟銻迄蟬座銑轎札攢嫡chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 200
3、5 趙小敏Java Programming加載聲音文件其中URL是一個(gè)網(wǎng)絡(luò)地址,網(wǎng)絡(luò)地址若包含聲音文件可采用第一種形式,否則采用第二種形式,播放本地計(jì)算機(jī)上的聲音文件也可采用第二種形式。假設(shè)有一個(gè)MIDI聲音文件trip.mid和Applet放在同一個(gè)目錄下,采用如下調(diào)用格式即可播放:play(getCodeBase( ),trip.mid);Applet的getAudioClip方法可創(chuàng)建這樣的對(duì)象,該方法加載指定網(wǎng)絡(luò)地址的聲音文件,并返回一個(gè)AudioClip對(duì)象,調(diào)用格式如下: AudioClip getAudioClip(URL url) AudioClip getAudioClip(
4、URL url, String name)謾鄙紉舜穎事交笛搜蘇碰欠烴鯨翅碘競(jìng)虱約償桂絆繳謠腳計(jì)罩弊漓騰囤黨chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming加載聲音文件創(chuàng)建AudioClip對(duì)象后,聲音文件即被加載,可調(diào)用它的方法處理聲音文件。如果該方法沒(méi)有找到指定的聲音文件,將返回null值,此時(shí)不能引用所創(chuàng)建的對(duì)象。AudioClip只有3個(gè)方法: void play()播放一遍; void loop()連續(xù)播放; void stop()停止播放。顫抓傘擾賃堅(jiān)娛曰稻歪垮戊龔酞翹榆田蚊馬覽
5、削旨毫溯尤民郵鋅覆姓恍懸chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming在Applet中播放聲音本地計(jì)算機(jī)工作目錄下有4個(gè)聲音文件,代表了.au 、 .mid、 .wav種聲音格式,加載并播放這些聲音文件。結(jié)果如下圖所示:梧枝霸丫悠猶甕碰咖赴注魏吧逗榜被待呢?fù)?jù)閃潛治怕奇甚范卉扮遭弊恐激chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming例1程序源碼: J_Audio.javaimport
6、java.applet.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class J_Audio extends JApplet implements ActionListener, ItemListener private AudioClip m_soundFirst, m_soundSecond,m_soundThird, m_soundFourth, m_soundCurrent; private JButton m_buttonPlay, m_buttonLoop, m_buttonSto
7、p; private JComboBox m_comboChoose; public void init( ) / Build interfaces and set sounds Container container = getContentPane( ); container.setLayout( new FlowLayout( ) );沮疥柱沛硫慶不瓦儀全遂姿族肅鉛癥吟帶瓣香舊腥渤溯幟聽(tīng)粘駒閏喜候得chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming String choices = h
8、i, bark,PINBALL,BATTVLOW ; m_comboChoose = new JComboBox( choices ); m_comboChoose.addItemListener( this ); container.add( m_comboChoose ); m_buttonPlay = new JButton( Play ); m_buttonPlay.addActionListener( this ); container.add( m_buttonPlay ); m_buttonLoop = new JButton( Loop ); m_buttonLoop.addA
9、ctionListener( this ); container.add( m_buttonLoop ); m_buttonStop = new JButton( Stop ); m_buttonStop.addActionListener( this ); container.add( m_buttonStop ); / load sounds and set m_soundCurrent m_soundFirst = getAudioClip( getDocumentBase( ), hi.au ); m_soundSecond = getAudioClip( getDocumentBas
10、e( ), bark.au ); m_soundThird = getAudioClip( getDocumentBase( ), PINBALL.MID ); m_soundFourth = getAudioClip( getDocumentBase( ), BATTVLOW.WAV ); m_soundCurrent = m_soundFirst; 災(zāi)債鵝施腎頭爸陵菠痰軍側(cè)浦輯字料皇奈涸冒騰兢盧扭立炊恩謗霉秦靡矗chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programmingpublic void s
11、top( ) / Stop playing sound m_soundCurrent.stop( ); public void itemStateChanged( ItemEvent e ) m_soundCurrent.stop( ); switch(m_comboChoose.getSelectedIndex( ) case 0:m_soundCurrent=m_soundFirst;break; case 1:m_soundCurrent=m_soundSecond;break; case 2:m_soundCurrent=m_soundThird;break; case 3:m_sou
12、ndCurrent=m_soundFourth;break; default:m_soundCurrent=m_soundFirst;break; public void actionPerformed(ActionEvent e) if ( e.getSource( ) = m_buttonPlay ) m_soundCurrent.play( ); else if ( e.getSource( ) = m_buttonLoop ) m_soundCurrent.loop( ); else if ( e.getSource( ) = m_buttonStop ) m_soundCurrent
13、.stop( ); / End of method: actionPerformed賂終鏟囊樸逆趣干昂它么矯林注矚食目拼洱孜呢售攔教卑頻循毆宰迪招七chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming 二、圖像顯示Java支持兩種圖像格式JPEG和GIF。JPEG稱(chēng)為聯(lián)合圖像專(zhuān)家組(joint photographic experts group),可用瀏覽器打開(kāi)。JPEG(或JPG)圖像格式一般用來(lái)顯示照片和具有連續(xù)色調(diào)的圖像,它能保存圖像所有顏色信息。JPEG是一種壓縮的文件格式,在打開(kāi)時(shí)
14、自動(dòng)解壓縮。GIF稱(chēng)為圖像交換格式(graphic interchange format),可用瀏覽器打開(kāi)。GIF圖像是一種壓縮文件格式,由于它能最大限度地減少文件轉(zhuǎn)換時(shí)間,所以在HTML文件中常用于顯示插圖或圖標(biāo)。GIF格式能有效減少文件大小,有利于在Internet上使用,Java支持這種圖像格式。醫(yī)辜芒氦徊邁配氈掛詛剿灸霞回椅啤啊同堡注砸贊獸灘生喝抨角振謀踢諷chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming1、加載圖像加載圖像一般放在初始化方法init中進(jìn)行。程序中的getImage
15、方法可加載Java支持的圖像文件,它有兩個(gè)參數(shù),一個(gè)是圖像文件地址,一個(gè)是圖像文件名稱(chēng)。由于Applet是面向網(wǎng)絡(luò)的,因此圖像文件的存儲(chǔ)位置并不局限于本地計(jì)算機(jī)的磁盤(pán)目錄,大部分情況是直接讀取Web服務(wù)器上的圖像文件。Java.applet.Applet的成員getImage方法返回一個(gè)Image對(duì)象,它的調(diào)用格式為: Image getImage(URL url) Image getImage(URL url, String name)忍右誅蕩批嶼陪汰偏矚鞏梅死棟澎擠將貝緯胳嘯又右傭睹榮袒俏蹤臆數(shù)隋chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-
16、JavaP 2005 趙小敏Java Programming2、顯示圖像顯示圖像需要調(diào)用Graphics類(lèi)的方法drawImage,它可以將Image對(duì)象關(guān)聯(lián)的圖像顯示在Applet的指定位置。drawImage方法的調(diào)用格式如下: boolean drawImage(Image img, int x, int y, ImageObserver observer) boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer)賒氯訟灸盈巢忽井蠻鞍搞紐旁腑階殿井苑蔡七岸陶放輔匯朵盅霹燈迎憾本cha
17、pter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming2、顯示圖像其中img就是要顯示的圖像、x和y是圖像顯示位置(x和y可取負(fù)值,表示一部分圖像被移出了顯示區(qū))、bgcolor是圖像顯示區(qū)域的背景色、observer是圖像加載跟蹤器,通常將該參數(shù)指定為this,即由Applet負(fù)責(zé)跟蹤圖像的加載情況。這兩種方法都是將圖像照原樣顯示,能不能對(duì)圖像進(jìn)行縮放呢?使用下面兩種調(diào)用格式就可以對(duì)圖像進(jìn)行縮放顯示: boolean drawImage(Image img, int x, int y, int wi
18、dth, int height, ImageObserver observer) boolean drawImage(Image img, int x, int y, int w, int h, Color c, ImageObserver observer)漳餡利塹邊胺吹忙柄惡群儈謬秘泉斗溫塔俠駝底充窟魯檬枝怪潔坐等隆腮chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming例2:顯示圖像import java.awt.*;import javax.swing.*;public class J_
19、Image extends JApplet Image m_image = new Image2; public void init( ) m_image0= getImage(getCodeBase( ), ts1.gif); m_image1= getImage(getCodeBase( ), ts2.gif); / End of method: init public void paint(Graphics g) g.drawImage(m_image0, 0, 0, 150, 150, this); g.drawImage(m_image1, 150, 0, 150, 150, thi
20、s); g.drawImage(m_image0, 0, 150, 300, 150, this); / End of method: paint / End of class: J_Image昂蝎撰病苛餌胞盈疆衍郎蔭三脆僑筷放器偏潮殺杰菊瞻膩鞋科災(zāi)傈摸捌利chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming運(yùn)行結(jié)果拈苗畔恒綱亭憤理偶窗但安阿辦縛超汁港楓數(shù)犯臆丫每薔穎運(yùn)信謂鴕錳捏chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005
21、趙小敏Java Programming3、幻燈機(jī)效果如果Applet 僅僅是顯示一幅圖像,沒(méi)有什么特別的意義,不如直接在HTML文件中顯示圖像。Applet應(yīng)該做HTML做不到的事情,例如像幻燈機(jī)那樣連續(xù)顯示圖像。多幅圖像的顯示,如下圖:餒撥靈身色尊好解裴劊流稈筋殷篆勉妄捶谷異獅烹脈燈證組冠淪吭哇蚤嚴(yán)chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming例3:多幅圖像的顯示import java.awt.*;import java.awt.event.*;import java.applet.*
22、;public class ShowDoggy extends Applet int index; Image imgs=new Image14; public void init() addMouseListener(new MouseAdapter() public void mouseClicked(MouseEvent e) index=+index%6; repaint(); ); for (int i=0; i14; i+) imgsi=getImage(getCodeBase(),doggy/T+i+.gif); public void paint(Graphics g) if
23、(imgsindex!=null) g.drawImage(imgsindex,20,20,this); 群逗韓蘆腥噶咳踩頌贈(zèng)奪盧乓雁爍吁攻煩悟雕球絆開(kāi)更媒賬陰進(jìn)校灣虹琳chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming三、圖形處理基本的圖形類(lèi):Color類(lèi):包含控制顏色的方法和常量Font類(lèi):包含控制字體的方法和常量Polygon類(lèi):包含創(chuàng)建多邊形的方法Graphis類(lèi):包含了繪制字符串、線(xiàn)條、矩形及其它形狀的方法Rectangle類(lèi):用來(lái)繪制矩形java.awt.geom.CubicCu
24、rve2D.Double類(lèi):畫(huà)拋物線(xiàn)java.awt.geom.Arc2D.Double 類(lèi):畫(huà)圓弧java.awt.geom.Ellipse2D.Double 類(lèi):畫(huà)橢圓啪純柜暑譏凈宿腿簡(jiǎn)改際崩談垮慈秋了花尊蛙色奠紐函瘓療鈕供洪叁蠻縮chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming圖形環(huán)境和圖形對(duì)象在java中,圖形環(huán)境使得可以在屏幕上繪圖,對(duì)各種圖形的顯示通過(guò)類(lèi)Graphics和Graphics2D來(lái)完成。Graphics對(duì)象包含了繪圖方法,字體控制和顏色控制等Component類(lèi)的p
25、aint方法以一個(gè)Graphics對(duì)象作為參數(shù),在Component執(zhí)行paint操作時(shí),系統(tǒng)將Graphics對(duì)象傳送給paint方法。 public void paint(Graphics g)亂訊巨寥抵痛擠修錐領(lǐng)撞黃賦卸葷垛藍(lán)艦福陷印蝴跡希助椎孽院故鞍殉的chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming顏色控制Java API提供Color類(lèi)定義顏色的方法和常量。每種顏色都是由紅、綠和籃三種顏色組成,稱(chēng)為RGB值。一個(gè)RGB值由三個(gè)部分,是0255的整數(shù)或0.01.0的浮點(diǎn)數(shù)。RGB
26、值越大,相應(yīng)顏色的含量越大。例4:使用幾種不同的顏色繪制填充矩形和字符串昆熄與聾瑪札岳巢籬嚎矽費(fèi)績(jī)?cè)敂[廂陰聘光當(dāng)膜五左錦筋唯疹商一霧斑診chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming字體控制Java API提供Font類(lèi)定義字體的方法和常量。Font類(lèi)的構(gòu)造函數(shù)有三個(gè)參數(shù):字體名稱(chēng)、字體風(fēng)格和字體大小。字體名稱(chēng)可以是運(yùn)行程序的系統(tǒng)所支持的任何一種字體,如Java字體Monospaced,SansSerif和Serif字體風(fēng)格可以是Font.PLAIN,Font.ITALIC和Font.B
27、OLD,字體風(fēng)格可以組合使用,如Font.ITALICFont.BOLD字體大小是以點(diǎn)來(lái)衡量的,一個(gè)點(diǎn)是1/21英寸注意:制定一個(gè)系統(tǒng)不存在的字體是一種邏輯錯(cuò)誤。狀矗勿咒嫂袖端排腕臉憶違韓窺站惡躇丸芯迪窯榴蚌蝗文抄哥墜婁無(wú)壟峽chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming例5:顯示4種不同大小、不同字體的文本 public void paint( Graphics g ) g.setFont( new Font( Serif, Font.BOLD, 12 ) ); g.drawStrin
28、g( Serif 12 point bold., 20, 50 ); g.setFont( new Font( Monospaced, Font.ITALIC, 24 ) ); g.drawString( Monospaced 24 point italic., 20, 70 ); g.setFont( new Font( SansSerif, Font.PLAIN, 14 ) ); g.drawString( SansSerif 14 point plain., 20, 90 ); g.setColor( Color.red ); g.setFont( new Font( Serif, Fo
29、nt.BOLD + Font.ITALIC, 18 ) ); g.drawString( g.getFont().getName() + + g.getFont().getSize() + point bold italic., 20, 110 ); 癸垢盜燒竄爵姑榷啄廊拙喪螺疆川熱夸柜迎偵兆撥苯填療戀英述煩銜拔攏chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming畫(huà)線(xiàn)、矩形和橢圓例6:線(xiàn)、矩形、3D矩形、圓角矩形和橢圓的繪制。public void paint( Graphics g ) g
30、.setColor( Color.red ); g.drawLine( 5, 30, 350, 30 ); g.setColor( Color.blue ); g.drawRect( 5, 40, 90, 55 ); g.fillRect( 100, 40, 90, 55 ); g.setColor( Color.cyan ); g.fillRoundRect( 195, 40, 90, 55, 50, 50 ); g.drawRoundRect( 290, 40, 90, 55, 20, 20 ); g.setColor( Color.yellow ); g.draw3DRect( 5, 1
31、00, 90, 55, true ); g.fill3DRect( 100, 100, 90, 55, false ); g.setColor( Color.magenta ); g.drawOval( 195, 100, 90, 55 ); g.fillOval( 290, 100, 90, 55 ); 贈(zèng)榷惕魄往筋貨甭喧吩工閃痔昏莆別含乍滬聽(tīng)羞炕蠟子逼蜒卸丑薊焊馬夜chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming畫(huà)圓弧弧形是橢圓的一部分,弧的角度以度來(lái)衡量。例7:演示drawArc和f
32、illArc。 public void paint( Graphics g ) / start at 0 and sweep 360 degrees g.setColor( Color.yellow ); g.drawRect( 15, 35, 80, 80 ); g.setColor( Color.black ); g.drawArc( 15, 35, 80, 80, 0, 360 ); / start at 0 and sweep 110 degrees g.setColor( Color.yellow ); g.drawRect( 100, 35, 80, 80 ); g.setColo
33、r( Color.black ); g.drawArc( 100, 35, 80, 80, 0, 110 ); / start at 0 and sweep -270 degrees g.setColor( Color.yellow ); g.drawRect( 185, 35, 80, 80 ); g.setColor( Color.black ); g.drawArc( 185, 35, 80, 80, 0, -270 ); / start at 0 and sweep 360 degrees g.fillArc( 15, 120, 80, 40, 0, 360 ); / start at
34、 270 and sweep -90 degrees g.fillArc( 100, 120, 80, 40, 270, -90 ); / start at 0 and sweep -270 degrees g.fillArc( 185, 120, 80, 40, 0, -270 ); 韻瓢蛀茶勾橢事偵洛貪裳阿寶巍咸摹鞋訣秋權(quán)績(jī)黑靡耕咎湘翅惹略釣閥詛chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming例8:畫(huà)多邊形和折線(xiàn) public void paint( Graphics g ) int
35、xValues = 20, 40, 50, 30, 20, 15 ; int yValues = 50, 50, 60, 80, 80, 60 ; Polygon poly1 = new Polygon( xValues, yValues, 6 ); g.drawPolygon( poly1 ); int xValues2 = 70, 90, 100, 80, 70, 35, 60 ; int yValues2 = 100, 100, 110, 110, 130, 110, 90 ; g.drawPolyline( xValues2, yValues2, 7 ); int xValues3 =
36、 120, 140, 150, 190 ; int yValues3 = 40, 70, 80, 60 ; g.fillPolygon( xValues3, yValues3, 4 ); Polygon poly2 = new Polygon(); poly2.addPoint( 165, 135 ); poly2.addPoint( 175, 150 ); poly2.addPoint( 270, 200 ); poly2.addPoint( 200, 220 ); poly2.addPoint( 130, 180 ); g.fillPolygon( poly2 ); 謗男磋津淪萌蛔鞍招題汕
37、拍擦殊臼纖耽豹銑踢滄突鷗哨汾判舞口拉瑪侈模chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming結(jié)果顯示(70,100)(90,100)(100,110)(80,110)(70,130)(65,110)(60,90)隋鴕注館遞閻骨男鴦煽歲原檸粒蒜癰懲臻鑲擲弓仁薛鼎臂財(cái)擂歹洶堡瞥丈chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java ProgrammingJava2D APIJava2D API提供繪制復(fù)雜圖形的二維圖形
38、功能類(lèi),具體在以下包中:java.awt.*java.awt.image.*java.awt.color.*java.awt.font.*java.awt.geom.*java.awt.print.*java.awt.image.renderable鎢麻絡(luò)彤丫吃段妓信拽韌咽荊職束悉繁識(shí)橋腔峪偏圃屠甲貢敷屑危渴險(xiǎn)憫chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java ProgrammingJava2D圖形java.awt.geom包中提供一些Java2D圖形功能的類(lèi),包括Ellipse2D.Double, Rectan
39、gle2D.Double, RoundRectangle2D.Double,Arc2D.Double和Line2D.Double等。例9:演示幾種Java2D圖形和繪制的特性例10:繪制五角星扭峻效胰袖奪鑿翌卉舀藤丫灸掄篆美吝且鋒畝添就爽喀噸蛋似輻伐墑冉賃chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming四、動(dòng)畫(huà)處理游戲軟件的設(shè)計(jì)中,動(dòng)畫(huà)向程序員提出了挑戰(zhàn),但在Java中實(shí)現(xiàn)動(dòng)畫(huà)則是十分簡(jiǎn)單的事情。下面讓我們一起由淺入深地編寫(xiě)幾個(gè)動(dòng)畫(huà)程序?qū)嵗?,并通過(guò)對(duì)這些實(shí)例的逐步改進(jìn)來(lái)探討Java動(dòng)畫(huà)技術(shù)
40、的關(guān)鍵。校還碰挎嘯搔矢秧胎溺蛹嗣繕剔枉魄層瞇置郴軌雖蠢債惠播佃敵謹(jǐn)瑟鎬罪chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming1、動(dòng)畫(huà)原理計(jì)算機(jī)動(dòng)畫(huà)原理十分簡(jiǎn)單,首先在屏幕上顯示出第一幀畫(huà)面,過(guò)一會(huì)兒把它擦掉,然后再顯示下一幀畫(huà)面,如此循環(huán)往復(fù)。由于人眼存在著一個(gè)視覺(jué)差,所以感覺(jué)好像畫(huà)面中的物體在不斷運(yùn)動(dòng)。路柞俠伊侄末軀夯謎驚乙壕屈釘忘承許貴峻鈞襄出工閱柿容爵柄粥快額叁chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Jav
41、a Programming例11:宇宙飛船游太空import java.awt.*;import java.applet.*;public class MovingImg extends Applet Image star, rocket; int x=0; public void init() star=getImage(getCodeBase(),starfield.gif); rocket=getImage(getCodeBase(),rocketship.gif); public void paint(Graphics g) g.drawImage(star,0,0,this); g.
42、drawImage(rocket,x,15,this); try Thread.sleep(30); x+=5; if (x=400) x=0; Thread.sleep(600); catch (InterruptedException e) repaint(); 丁魂膛障放棘諒燦碴酒舊調(diào)霞葬日宣穿畏維駛拉曼契內(nèi)瑞團(tuán)鏈懾頤灼梅盂chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming程序分析(1)這是一個(gè)很簡(jiǎn)單的動(dòng)畫(huà),在Applet中有一個(gè)充當(dāng)太空的背景圖,一艘宇宙飛船在太空?qǐng)D上不斷從左邊移動(dòng)到
43、右邊。程序中創(chuàng)建了兩個(gè)Image對(duì)象star和rocket,在init方法中分別加載了兩個(gè)圖像文件和這兩個(gè)對(duì)象關(guān)聯(lián)起來(lái)。添加了變量x用來(lái)指定飛船的畫(huà)出位置,x初始化為10。在paint方法中,注意到太空總是畫(huà)在指定位置(0, 0),而飛船則畫(huà)在位置(x, 15),其中x的值是不斷變化的。鍬傲阮哮穿狀直爵霞抽腥鑷攏顆蹈媳猴看影半岔郝骨梧矮剎丟斜雪迂療序chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming程序分析(2)真正使飛船實(shí)現(xiàn)動(dòng)畫(huà)效果是在try.catch塊中。paint方法的最后一條語(yǔ)句是
44、調(diào)用repaint方法。repaint方法的功能是重畫(huà)圖像,它先調(diào)用update方法將顯示區(qū)清空,再調(diào)用paint方法畫(huà)出圖像。這就形成了一個(gè)循環(huán),paint調(diào)用了repaint,而repaint又調(diào)用了paint,使飛船不間斷地來(lái)回移動(dòng)。運(yùn)行這個(gè)Applet時(shí),畫(huà)面有閃爍現(xiàn)象。一般來(lái)說(shuō),畫(huà)面越大,update以背景色清除顯示區(qū)所占用的時(shí)間就越長(zhǎng),不可避免地會(huì)產(chǎn)生閃爍。為了達(dá)到平滑而又沒(méi)有閃爍的動(dòng)畫(huà)效果,就應(yīng)該考慮采取一些補(bǔ)救措施。覆蓋update方法可以降低閃爍,但不能消除它。能有效消除閃爍的方法是采用圖形雙緩沖技術(shù)(graphics double buffering)?;熘u棕患獺棟摔恒荊
45、融隘貝卷呵巨捌踩淋域礎(chǔ)域快班狂煎遍橫項(xiàng)池媳倔chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming2、圖形雙緩沖技術(shù)import java.awt.*;import java.applet.*;public class MovingImg extends Applet Image star, rocket, buffer; Graphics gContext; int x=10; public void init() star=getImage(getCodeBase(),starfield.g
46、if); rocket=getImage(getCodeBase(),rocketship.gif); buffer=createImage(getWidth(),getHeight(); gContext=buffer.getGraphics(); public void paint(Graphics g) gContext.drawImage(star,0,0,this); gContext.drawImage(rocket,x,15,this); g.drawImage(buffer,0,0,this); try Thread.sleep(10); x+=2; if (x=400) x=
47、10; Thread.sleep(1000); catch (InterruptedException e) repaint(); public void update(Graphics g) paint(g); 例12:改進(jìn)后的宇宙飛船游太空咋足春擒?chē)?yán)在坍味豐狼恥榷得邵偶躇散湛瀉騙衡雜逸宗豺咯晰暇凌如升騁chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programming3、用線(xiàn)程實(shí)現(xiàn)動(dòng)畫(huà)例12用圖形雙緩沖改善了圖像閃爍問(wèn)題,但仍存在一些其他問(wèn)題。例如用戶(hù)離開(kāi)網(wǎng)頁(yè)后,嵌入的Applet會(huì)繼續(xù)運(yùn)行,占用CPU
48、時(shí)間。下面的例13出于網(wǎng)絡(luò)實(shí)用的目的,采用獨(dú)立線(xiàn)程實(shí)現(xiàn)動(dòng)畫(huà)。利肘甘厲禱鍍通拘魁七印垛觀嬰薯煤敲吊嘶鱗鐐治掀鍬開(kāi)巨朗膳瞎淪婆壕chapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaPchapter09多媒體與圖形學(xué)程序設(shè)計(jì)-JavaP 2005 趙小敏Java Programmingimport java.awt.*;import java.applet.*;public class Running extends Applet implements Runnable Image img=new Image14; Image buffer; Graphics gContext; Thread animate; int index=0; public void init() buffer=createImage(getWidt
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 圓形草屋 施工方案
- 電梯鋼結(jié)構(gòu)施工方案
- 2025年度木工雕刻技藝傳承與勞務(wù)合作合同
- 2025年度旅游管理公司高層管理人員聘用合同
- 二零二五年度茶葉電商平臺(tái)合作合同
- 二零二五年度學(xué)校臨時(shí)教師聘用合同書(shū)-體育教練員合作合同
- 2025年度飯店員工績(jī)效考核與薪酬管理合同
- 二零二五年度無(wú)固定期限勞動(dòng)合同解除賠償金支付及賠償金執(zhí)行協(xié)議
- 2025年度汽修廠修理工勞動(dòng)合同續(xù)簽與調(diào)整合同
- 二零二五年度彩鋼棚建筑綠色生態(tài)施工合同
- 循環(huán)流化床鍋爐操作工安全技術(shù)操作規(guī)程模版(3篇)
- 2024院感培訓(xùn)課件
- 2024-2030年中國(guó)稅務(wù)師事務(wù)所行業(yè)管理模式及投資前景展望報(bào)告版
- 2024年全國(guó)高考英語(yǔ)試題及答案-湖南卷
- 《少兒汽車(chē)知識(shí)講座》課件
- 部編人教版小學(xué)四年級(jí)下冊(cè)道德與法治全冊(cè)教案及每課教學(xué)反思
- 中建吊籃安拆專(zhuān)項(xiàng)施工方案(專(zhuān)家論證版)
- 《汽車(chē)維修接待實(shí)務(wù)》 課件全套 孫麗學(xué)習(xí)情景1-8 汽車(chē)維修服務(wù)接待認(rèn)知 -新能源汽車(chē)維修接待
- 2020年礦建監(jiān)理工作總結(jié)
- 獸醫(yī)學(xué)英語(yǔ)詞匯【參考】
- WS 308-2019 醫(yī)療機(jī)構(gòu)消防安全管理
評(píng)論
0/150
提交評(píng)論