版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第十章 文本顯示與圖形圖像處理,目 錄,重點(diǎn)與難點(diǎn)點(diǎn)撥,Java繪圖基礎(chǔ),Java圖像處理,經(jīng)典練習(xí)題,Graphics繪圖,字體設(shè)置,本章知識(shí)重點(diǎn),GUI組件及Graphics類的繪圖方法,字體設(shè)置,基本圖形繪制的各方法及畫(huà)布Canvas,Java圖像處理,與圖形圖像處理相關(guān)的類,本章知識(shí)難點(diǎn),Java繪圖基礎(chǔ),Java的繪圖機(jī)制,與圖形圖像處理相關(guān)的類 java中支持圖形圖像處理的類與接口主要定義于java.awt類庫(kù)中,
2、Java繪圖基礎(chǔ),Graphics類,Graphics類中封裝了幾乎所有的圖形處理的方法,該類用于在一個(gè)二維坐標(biāo)系中繪制圖形與顯示格式化文字。由于Graphics類定義于java.awt包中,在繪制圖形的程序中,必須引入java.awt,即在程序開(kāi)頭需加上以下語(yǔ)句: import java.awt.*; 或import java.awt.Graphics ;,Java繪圖基礎(chǔ),Graphics類的繪圖區(qū)域
3、為能夠繪制并顯示圖形的一些組件,坐標(biāo)原點(diǎn)在組件的左上角,X軸為水平方向,坐標(biāo)值從左至右逐漸增大,Y軸在垂直方向,坐標(biāo)值從上向下逐漸增大。Java坐標(biāo)的度量單位是像素,在Java的圖形坐標(biāo)系統(tǒng)中,坐標(biāo)值只能為整數(shù)。由于不同的平臺(tái)具體實(shí)現(xiàn)繪圖功能中存在著一定差異,Graphics類為抽象類,不能用new命令創(chuàng)建Graphics類實(shí)例對(duì)象,Java只提供給用戶一個(gè)不依賴于具體平臺(tái)的通用接口,使用戶能夠調(diào)用Graphics類的各種繪圖方法,實(shí)現(xiàn)
4、繪圖與繪制文本的功能。,Java繪圖基礎(chǔ),GUI程序中,文本的輸出顯示是作為圖形對(duì)象來(lái)處理的,控制臺(tái)應(yīng)用程序中的System.out.println()方法,只能以DOS字符的形式,在命令行窗口上顯示文字。GUI界面中字符串信息的顯示,要使用Graphics或Graphics2D提供的繪制字符或字符串信息的成員方法。,圖形文本,Java繪圖基礎(chǔ),Graphics類提供了三種繪制文字的方法:①字符串輸出方法:drawString(Str
5、ing s,int x,int y)。②字符數(shù)組輸出方法:drawChars(char[] s,int offset,int length,int x,int y)。③字節(jié)數(shù)組輸出方法:drawBytes(byte[] s,int offset,int length,int x,int y)。其中x、y參數(shù)為字符串輸出的位置坐標(biāo)。例如:g. drawString(“我的愛(ài)好是讀書(shū)和聽(tīng)音樂(lè)”,50,100);語(yǔ)句將會(huì)繪出一串文本,
6、輸出位置坐標(biāo)為(50,100) 。,Java繪圖基礎(chǔ),GUI編程中,Color類定義了操作顏色的常量與方法,該類的完整包路徑為java.awt.Color。 Color類常用的三種構(gòu)造方法的定義為:①public Color(int r,int g,int b);②public Color(float r,float g,float b);③public Color(int rgb);Color類中封裝了常用的13種標(biāo)準(zhǔn)顏色
7、的符號(hào)常量。如: Color.BLACK Color.WHITE Color.RED Color.GREEN Color.BLUE Color.YELLOW 等,顏色設(shè)置,Java繪圖基礎(chǔ),此外,Color類還提供了獲取RGB顏色分量的對(duì)應(yīng)方法:①public int getRed(); //獲取當(dāng)前顏色的紅色分量值(范圍為[0,255])。②public int getGre
8、en(); //獲取當(dāng)前顏色的綠色分量值(范圍為[0,255])。③public int getBlue(); //獲取當(dāng)前顏色的藍(lán)色分量值(范圍為[0,255])。,Java繪圖基礎(chǔ),如創(chuàng)建一個(gè)以粉紅色pink(RGB值為:255,175,175)前景顯示“姓名”的標(biāo)簽對(duì)象,可用以下語(yǔ)句實(shí)現(xiàn):Color labelColor=new Color(255,175,175);Label lblName=new Label
9、(“姓名”);lblName.setForeground(labelColor);或者用以下等價(jià)的方式實(shí)現(xiàn):Label lblName=new Label(“姓名”);lblName.setForeground(Color.PINK);,Java繪圖基礎(chǔ),java.awt.Component類作為大多數(shù)GUI組件的基類,定義了paint()方法,用來(lái)實(shí)現(xiàn)在組件上繪制圖形的功能。applet小程序的基類:Applet或Japple
10、t,也間接地由Component類派生,因此applet小程序也具有paint()方法 paint()方法定義:void paint(Graphics g); paint()方法通常由系統(tǒng)自動(dòng)調(diào)用,用戶一般不能直接在程序中顯式調(diào)用它,而是通過(guò)repaint()方法來(lái)間接調(diào)用它。組件首次顯示外觀時(shí),applet小程序在被加載運(yùn)行時(shí),系統(tǒng)都會(huì)調(diào)用相關(guān)的paint()方法。,GUI組件的繪圖方法,Component
11、類與paint()方法,Java繪圖基礎(chǔ),此外,Component類中還定義了另外兩個(gè)直接或間接調(diào)用paint()方法的方法:①更新方法update(Graphics g);當(dāng)組件的尺寸、外觀等被改變時(shí),系統(tǒng)將調(diào)用此方法,重新繪制組件。update()方法的實(shí)現(xiàn)中包含了對(duì)paint()方法的調(diào)用。②重繪方法repaint();該方法沒(méi)有參數(shù),執(zhí)行時(shí)會(huì)清除組件的原有背景圖形,并使用paint()方法重新繪制該組件。用戶可以在程序中
12、直接調(diào)用repaint()方法,當(dāng)組件為輕量級(jí)組件時(shí),該方法會(huì)直接調(diào)用paint()方法,否則會(huì)通過(guò)調(diào)用update()方法間接調(diào)用paint()方法。,Java繪圖基礎(chǔ),【例】在一個(gè)300×200的Frame窗口內(nèi),用紅色繪制四葉玫瑰曲線。,Java繪圖基礎(chǔ),import java.awt.*;import java.awt.event.*;import java.awt.Color;public class Exa_
13、10_1 extends Frame{ private static final double PI=3.1415926; private int appWidth,appHeight; public Exa_10_1(String title){ super(title); this.setSize(300,200); //實(shí)現(xiàn)關(guān)閉窗口的功能 this.addWindo
14、wListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); },Java繪圖基礎(chǔ),public void paint(Graphics g){ super.paint(g);//調(diào)用父類的繪制方法 //獲取當(dāng)前窗口的寬度與高度值 appWidth=this
15、.getWidth(); appHeight=this.getHeight(); int ox,oy,x,y; //設(shè)置原點(diǎn)(ox,oy)的坐標(biāo)為當(dāng)前窗口中心 ox=appWidth/2; oy=appHeight/2; g.setColor(Color.RED); //設(shè)置繪圖的前景色,Java繪圖基礎(chǔ),//繪制坐標(biāo)軸 g.
16、drawLine(ox,10,ox,appHeight); g.drawLine(0,oy,appWidth,oy); //定義控制角度與半徑變化的變量 int i,j=10; double angle,r; while (j<100){ for(i=0;i<1023;i++){ //計(jì)算最新的角度 angle = i*PI/512;
17、 r = j*Math.sin(2*angle);,Java繪圖基礎(chǔ),//計(jì)算最新的軌跡點(diǎn)坐標(biāo) x =(int)Math.round(r*Math.cos(angle)*2); y =(int)Math.round(r*Math.sin(angle)); g.fillOval(ox+x,oy+y,1,1); //畫(huà)軌跡點(diǎn) } j = j +
18、 5; //增進(jìn)的步長(zhǎng) } } public static void main(String[] args){ Exa_10_1 app=new Exa_10_1("Paint() Method Usage"); app.setVisible(true); }},Java繪圖基礎(chǔ),組件的基類Component類提供了一組get類型的方法用來(lái)獲取當(dāng)前繪圖上下文環(huán)境的一些重
19、要參數(shù)。getGraphics()為當(dāng)前組件創(chuàng)建 graphics上下文環(huán)境getGraphicsConfiguration()獲取相關(guān)的Graphics設(shè)置getForeground()獲取與當(dāng)前組件的前景顏色getBackground()獲取與當(dāng)前組件的背景顏色getFont()獲取與當(dāng)前組件的字體對(duì)象getFontMetrics(Font font)獲取指定字體的樣式信息,Component類的get/set方法組,J
20、ava繪圖基礎(chǔ),Component類還提供了一組用來(lái)設(shè)置外觀與行為的set方法:①setEnabled(),設(shè)置組件的可用性。②setVisible(),設(shè)置組件的可見(jiàn)性。③setForeground(),設(shè)置組件的前景色。④setBackground(),設(shè)置組件的背景色。⑤setBounds(),設(shè)置組件的起始位置與尺寸大小。⑥setLocation(),設(shè)置組件的起始位置。⑦setSize(),設(shè)置組件的尺寸大小。
21、⑧setPreferredSize(),設(shè)置組件首選的尺寸。⑨setMaximumSize(),設(shè)置組件的最大尺寸。⑩setMinimumSize(),設(shè)置組件的最小尺寸。此外,常用的還有一個(gè)設(shè)置組件顯示文字字體類型與樣式的一個(gè)方法:public void setFont(Font f)。,Java繪圖基礎(chǔ),【例】用組件的getGraphics()方法實(shí)現(xiàn)如下所述的功能:在一個(gè)300×200的JFrame窗口內(nèi),放置一個(gè)
22、標(biāo)簽與一個(gè)按鈕,當(dāng)點(diǎn)擊按鈕后,標(biāo)簽中繪制一個(gè)黃色的橢圓,并在橢圓內(nèi)顯示藍(lán)色的RGB值。,Java繪圖基礎(chǔ),import java.awt.*;import java.awt.event.*;import java.awt.Color;import javax.swing.*;public class Exa_10_2 extends JFrame implements ActionListener{ private JLab
23、el jlblDraw=new JLabel(); private JButton jbtnDraw=new JButton("開(kāi)始繪圖"); public Exa_10_2(String title){ super(title); this.setSize(300,200); jlblDraw.setSize(300,150); //實(shí)現(xiàn)關(guān)閉窗口的功能,Java
24、繪圖基礎(chǔ),this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jbtnDraw.addActionListener(this); Container contentPane=this.getContentPane(); contentPane.setLayout(new BorderLayout()); contentPane.add(jlblDraw,Bor
25、derLayout.CENTER); contentPane.add(jbtnDraw,BorderLayout.SOUTH); } //按鈕點(diǎn)擊事件響應(yīng)方法 public void actionPerformed(ActionEvent e){ //創(chuàng)建標(biāo)簽的Graphics上下文環(huán)境 Graphics g=jlblDraw.getGraphics();,Java繪圖基礎(chǔ),//用黃色畫(huà)一填充橢圓 g
26、.setColor(Color.YELLOW); g.fillOval(50,10,200,130); //用藍(lán)色顯示當(dāng)前顏色的字符串 g.setColor(Color.BLUE); g.drawString(g.getColor().toString(),65,75); //使按鈕變得不再可用 jbtnDraw.setEnabled(false); } public static void m
27、ain(String[] args){ Exa_10_2 app=new Exa_10_2("getGraphics() Method Usage"); app.setVisible(true); } },Java繪圖基礎(chǔ),paintComponent(),用來(lái)繪制幾何圖形,渲染圖形文字。paintComponent()方法的原型定義如下:protected void paintCo
28、mponent(Graphics g);JComponent類的paintComponent()方法與Component類的paint()具有完全相同的參數(shù)形式,兩種方法的功能與使用也基本類似。,JComponent類與paintComponent()方法,Java繪圖基礎(chǔ),Swing應(yīng)用中,經(jīng)常會(huì)在JPanel組件中繪制圖形。通常的做法是:定義一個(gè)JPanel類的子類,在該子類中覆蓋/重寫(xiě)類的paintComponent()方法
29、,在方法體內(nèi)放入繪圖的操作語(yǔ)句。然后再將該JPanel組件添加到主窗口的內(nèi)容窗格(ContentPane)內(nèi)。 具體的實(shí)現(xiàn)結(jié)構(gòu)類似于如下的代碼: class drawPanel extends Jpanel{ public void paintComponent(Graphics g) { // super.paintComponent(g);…… //相關(guān)的圖形或文字繪制語(yǔ)句 } },字體設(shè)置,一個(gè)F
30、ont類的對(duì)象表示了一種字體顯示效果,包括字體類型、Font MyFont = new Font ( ″TimesRoman″, Font.BOLD, 12 ); MyFont對(duì)應(yīng)的是12磅TimesRoman類型的黑體字,其中指定字型時(shí)要用到Font類三個(gè)常量:Font.PLAIN, Font.BOLD, Font.ITALIC。如果希望使用該Font對(duì)象,則可以利用Graphics類的setFont( )方法: g. s
31、etFont ( MyFont );如果希望指定控制組件,如按鈕或文本框中的字體效果,則可以使用控制組件的方法setFont( )。如設(shè)btn是一個(gè)按鈕對(duì)象,則語(yǔ)句: btn.setFont(MyFont);另外,與setFont( )方法相對(duì)的getFont( )方法將返回當(dāng)前Graphics或組件對(duì)象使用的字體。,Font類,字體設(shè)置,【例】獲取當(dāng)前系統(tǒng)中所有可用字體的名稱,在標(biāo)簽中顯示出這些可用字體的數(shù)目,在文本區(qū)中顯
32、示出這些可用字體的名稱。,字體設(shè)置,import java.awt.*;import javax.swing.*;import java.awt.event.*;public class Exa_10_4 extends JFrame implements ActionListener{ //定義GUI所涉及的組件 JLabel jlblTotalFonts=new JLabel(); JButton jbtnDis
33、p=new JButton("顯示當(dāng)前可用字體名稱"); JTextArea jtxtaFontNames=new JTextArea(); JScrollPane jsclpane4txtArea=new JScrollPane(jtxtaFontNames);,字體設(shè)置,public Exa_10_4(String title) { super(title); jbtnDisp.addA
34、ctionListener(this); //為標(biāo)簽組件設(shè)置前景色為紅色 jlblTotalFonts.setForeground(new Color(255,0,0)); //設(shè)置文本區(qū)組件為不可編輯狀態(tài) jtxtaFontNames.setEditable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //添加
35、各個(gè)組件到窗口的內(nèi)容窗格中 Container contentPane=this.getContentPane(); contentPane.setLayout(new BorderLayout()); contentPane.add(jlblTotalFonts,BorderLayout.NORTH);,字體設(shè)置,contentPane.add(jsclpane4txtArea,BorderLayout.CEN
36、TER); contentPane.add(jbtnDisp,BorderLayout.SOUTH); this.setSize(300,300); this.setVisible(true); } //響應(yīng)按鈕點(diǎn)擊事件 public void actionPerformed(ActionEvent e){ jbtnDisp.setEnabled(false); //使自己失效以免兩次被點(diǎn)擊
37、 String[] availableFontNames; //獲取當(dāng)前平臺(tái)可用的字體集 GraphicsEnvironment ge=GraphicsEnvironment.,字體設(shè)置,getLocalGraphicsEnvironment(); availableFontNames=ge.getAvailableFontFamilyNames(); //當(dāng)前平臺(tái)可用字體的總數(shù) int total=a
38、vailableFontNames.length; jlblTotalFonts.setText("當(dāng)前平臺(tái)系統(tǒng)可用的字體總數(shù)為: ["+total+"]"); //將當(dāng)前平臺(tái)可用字體名稱添加到文本區(qū)中 for (int k=0;k<total;k++) jtxtaFontNames.append(availableFontNames[k]+"\n&quo
39、t;); } public static void main(String[] args){ new Exa_10_4("Font Usage Demo"); }},字體設(shè)置,FontMetrics類定義了字體的規(guī)格對(duì)象,提供了比Font類更詳盡的特定字體的描述信息。這些信息可以通過(guò)調(diào)用FontMetrics類的相關(guān)方法來(lái)獲得。FontMetrics類提供了獲取文字樣式中各類規(guī)格信息的成員方法。
40、創(chuàng)建FontMetrics類對(duì)象要通過(guò)調(diào)用Graphics類的getFontMetrics()方法來(lái)實(shí)現(xiàn)。如:public void paint(Graphics g) {FontMetrics fm = g.getFontMetrics(); },FontMetrics類,字體設(shè)置,【例】編程實(shí)現(xiàn)演示FontMetrics類的字體規(guī)格信息。用一根粗黑線表示Baseline,另外三根分別表示字體的Leading、Ascent和D
41、escent的位置。窗口頂端包含輸入顯示文本內(nèi)容的文本域及三個(gè)用來(lái)選擇字體名稱、字體樣式及字號(hào)的組合列表框。當(dāng)在文本域中輸入新的內(nèi)容并敲回車,或者改變了任何一個(gè)組合列表框的當(dāng)前選擇,都會(huì)使字體規(guī)格信息的演示內(nèi)容發(fā)生變化。,Graphics繪圖,利用Graphics類可繪制的圖形有直線、各種矩形、多邊形、圓和橢圓等。下面的例子綜合了這些方法。,Graphics類的繪圖方法,Graphics繪圖,import java.awt.*;imp
42、ort java.applet.Applet;public class DrawFigures extends Applet { public void paint ( Graphics g) { g.drawLine(30,5,40,5); //畫(huà)直線 g.drawRect(40,10,50,20);//畫(huà)矩形框(左上角x坐標(biāo), y坐標(biāo),x軸尺寸,y軸尺寸) g.fillRect(60,30,
43、70,40); //畫(huà)實(shí)心矩形 g.drawRoundRect(110,10,130,50,30,30); //畫(huà)圓角矩形框 g.drawOval(150,120,70,40); //畫(huà)橢圓形框(左上角x坐標(biāo),左上角y坐標(biāo),x軸尺 寸,y軸尺寸),若x 軸尺寸與y軸尺寸相等,則畫(huà)出圓形 g.fillOval(190,160,70,40); //畫(huà)實(shí)心橢圓,Graphics繪圖,g.drawOval(90,
44、100,50,40); //畫(huà)橢圓框 g.fillOval(130,100,50,40); //畫(huà)實(shí)心橢圓 drawMyPolygon(g); //自定義的畫(huà)多邊形的方法 g.drawString(″They are figures!″,100,220); } public void drawMyPolygon( Graphics g) { int[] xCoords = {
45、30,50,65,119,127}; //保存多邊形各點(diǎn)x坐標(biāo)的數(shù)組 int[] yCoords = {100, 140,127,169,201}; //保存多邊形各點(diǎn)y坐標(biāo)數(shù)組 g.drawPolygon( xCoords,yCoords,5); //畫(huà)自由多邊形框 } },Graphics繪圖,要在Java程序圖形界面的容器中繪制圖形,首先,需要明確希望繪制的圖形是什么,是圓、橢圓,還是直線,這由所選定
46、的方法來(lái)確定;其次,需要指明所繪制圖形或文字的大小和位置,,Graphics繪圖,繪制直線的方法格式為: drawline(int x1, int y1, int x2, int y2)。其中整型參數(shù)對(duì)( x1,y1)代表直線的起點(diǎn),( x2,y2)代表直線的終點(diǎn)。,基本圖形繪制,點(diǎn)(Point),直線(Line),Graphics繪圖,【1】普通矩形◆線條方式
47、:drawRect( (int x,int y,int w,int h) ◆填充方式:fillRect( int x,int y,int w,int h) 【參數(shù)說(shuō)明】①(x,y)為矩形的左上角坐標(biāo);②w為矩形的寬度;③h為矩形的高度。drawRect()和fillRect()方法的唯一不同之處在于:fillRect()方法畫(huà)出矩形框后用前景色將其填充。,矩形(Rectangle),Graphics類中提供了三種矩形類型。這
48、三類矩形都包括線條 方式與填充方式兩類繪圖方法。,Graphics繪圖,【2】圓角矩形◆線條方式:drawRoundRect(int x,int y,int w,int h, int arcWidth,int arcHeight)◆填充方式:fillRoundRect(int x,int y,int w,int h, int arcWidth,int arcHeight)【參數(shù)說(shuō)明】圓角性質(zhì)參數(shù)arcWidth與arcHeig
49、ht,分別代表了圓角弧對(duì)應(yīng)橢圓的的長(zhǎng)軸(水平軸)與短軸(垂直軸)。圓角矩形的圓角性質(zhì)參數(shù)的意義見(jiàn)圖10.12。當(dāng)arcWidth=w且arcHeight=h時(shí),圓角矩形就成為一個(gè)橢圓。因此可用繪制圓角矩形的方法生成橢圓。,Graphics繪圖,【3】立體矩形◆線條方式:draw3DRect(int x,int y,int w,int h,boolean raised)◆填充方式:fill3DRect(int x,int y,in
50、t w,int h,boolean raised) 【參數(shù)說(shuō)明】布爾型的raised參數(shù)用來(lái)控制立體矩形的凸出或凹入效果。raised為true時(shí),畫(huà)出的立體矩形是凸起的;raised為false時(shí),畫(huà)出的立體矩形是凹陷的。,Graphics繪圖,橢圓繪制方法與普通矩形的方法在形式上相同的,這是因?yàn)闄E圓的規(guī)格大小是用它的外接矩形來(lái)指定的。◆線條方式:drawOval(int x ,int y ,int w ,int h)◆填充方
51、式:fillOval(int x ,int y ,int w ,int h)【參數(shù)說(shuō)明】①x、y參數(shù)代表橢圓外接矩形的左上角位置坐標(biāo)。②參數(shù)w、h代表橢圓外接矩形的寬度和高度。,橢圓(Oval),Graphics繪圖,圓弧是橢圓的一部分,夾在兩個(gè)角之間,因此畫(huà)圓弧的方法比畫(huà)橢圓的方法多了兩個(gè)角度參數(shù)(都以角度為單位):起始角和張角。起始角確定了圓弧的起始位置,張角確定了圓弧的大小。張角可正可負(fù),當(dāng)取正值時(shí),畫(huà)出的為沿逆時(shí)針?lè)较虻?/p>
52、圓??;取負(fù)值時(shí),畫(huà)出的為沿順時(shí)針?lè)较虻膱A弧。當(dāng)張角取值大于360時(shí),畫(huà)出的就是橢圓。,圓弧(Arc),Graphics繪圖,drawArc()方法畫(huà)出的是一段圓弧,而fillArc()方法畫(huà)出的是一個(gè)扇形?!艟€條方式:drawArc(int x ,int y ,int w ,int h ,int startAngle ,int arcAngle)◆填充方式:fillArc(int x ,int y ,int w,int h ,int
53、 startAngle ,int arcAngle)【參數(shù)說(shuō)明】①前四個(gè)參數(shù)x、y、w和h規(guī)定了圓弧所對(duì)應(yīng)橢圓的規(guī)格大小。②startAngle表示圓弧的起始角。③arcAngle表示圓弧的張角,可取正負(fù)整數(shù)值代表有方向的角度。,Graphics繪圖,線條方式畫(huà)出的多邊形一般是不封閉的,除非首頂點(diǎn)與尾頂點(diǎn)坐標(biāo)值一樣。但填充方式畫(huà)出的填充多邊形則為封閉的多邊形,因?yàn)樘畛洳粦?yīng)該溢出多邊形的有效范圍。 根據(jù)繪制所采用的數(shù)據(jù)表達(dá)方式
54、的不同,多邊形的繪制方法可分為兩組,每一組又具有線條與填充兩種繪制方式。,多邊形(Polygon),Graphics繪圖,第一組:用坐標(biāo)數(shù)組作為多邊形的頂點(diǎn)序列繪制多邊形:◆線條方式:drawPolygon(int[] xPoints,int[] yPPoints,int nPoints) ◆填充方式:fillPolygon(int[] xPts,int[] yPts,int n)【參數(shù)說(shuō)明】①xPoints與yPPoints為
55、兩個(gè)數(shù)組,分別保存多邊形多個(gè)頂點(diǎn)的X坐標(biāo)值與Y坐標(biāo)值。兩個(gè)數(shù)組的長(zhǎng)度應(yīng)該相等②nPoints表示多邊形頂點(diǎn)的個(gè)數(shù),其值不能超過(guò)兩個(gè)數(shù)組的長(zhǎng)度。多邊形繪制方法將兩個(gè)數(shù)組對(duì)應(yīng)的頂點(diǎn)按順序用直線連接起來(lái),組成一個(gè)多邊形,多邊形的頂點(diǎn)坐標(biāo)序列為:(xPoints[0],yPPoints[0]),(xPoints[1],yPPoints[1])……(xPoints[n],yPPoints[n])。,Graphics繪圖,第二組:用Polygo
56、n對(duì)象作為數(shù)據(jù)源繪制多邊形:◆線條方式:drawPolygon(Polygon p)◆填充方式:fillPolygon(Polygon p)【參數(shù)說(shuō)明】參數(shù)p為Polygon對(duì)象。Polygon類是java.awt包內(nèi)提供的工具類,該類封裝了一個(gè)封閉區(qū)域的節(jié)點(diǎn)坐標(biāo)序列。該類具有以下構(gòu)造方法:Polygon(),創(chuàng)建一個(gè)空的多邊形對(duì)象。Polygon(int[] xpoints, int[] ypoints, int npoi
57、nts),創(chuàng)建以指定參數(shù)為初始化值的多邊形對(duì)象。其參數(shù)意義與drawPolygon()方法相同。 Polygon類具有addPoint(int x, int y)成員方法,用來(lái)將一個(gè)指定點(diǎn)的坐標(biāo)添加到多邊形對(duì)象中。,畫(huà)布Canvas,Canvas是java.awt包中用來(lái)繪圖的矩形組件,其作用類似于Windows的畫(huà)圖板,用戶可在這塊區(qū)域上直接畫(huà)出圖形。Canvas繼承自Component類,具有Paint(Graphics g)、u
58、pdate(Graphics g)及repaint()方法,能夠響應(yīng)鼠標(biāo)和鍵盤(pán)事件,并具有自己的坐標(biāo)系統(tǒng)。畫(huà)布提供了一塊專門的圖形區(qū)域,通過(guò)設(shè)定自己的邊界而和其它組件區(qū)分開(kāi),以保護(hù)畫(huà)面不被覆蓋。即使畫(huà)面被破壞,仍可通過(guò)調(diào)用Canvas的paint()方法重畫(huà)圖形,恢復(fù)原有的狀態(tài)。Canvas類的構(gòu)造方法有兩種形式: ⑴無(wú)參構(gòu)造方法Canvas(),用來(lái)創(chuàng)建一個(gè)新的畫(huà)布對(duì)象。⑵有參構(gòu)造方法Canvas(GraphicsConfig
59、uration config),創(chuàng)建一個(gè)適用于指定的繪圖配置對(duì)象的的畫(huà)布對(duì)象。,畫(huà)布Canvas,如Canvas canvas1=new Canvas();語(yǔ)句就創(chuàng)建了一個(gè)空白的畫(huà)布對(duì)象。創(chuàng)建了Canvas對(duì)象后,還要調(diào)用setSize()方法設(shè)定這個(gè)畫(huà)布的大小。 Canvas類的重要方法包括:⑴paint(Graphics g),用來(lái)在畫(huà)布上繪制圖形。⑵void update(Graphics g),用來(lái)更新畫(huà)布。用戶無(wú)法直
60、接使用Canvas的paint()方法,使用時(shí)需要先定義一個(gè)以Canvas為基類的子類,并在子類中重寫(xiě)paint()方法;然后在子類的paint()方法中,借助于方法的Graphics對(duì)象參數(shù),調(diào)用Graphics類的繪圖方法,實(shí)現(xiàn)用戶的繪圖操作。,畫(huà)布Canvas,【例】使用畫(huà)布實(shí)現(xiàn)以下功能:在畫(huà)布上沿一條水平直線,從左到右繪制一系列的圓,圓的半徑逐步增大,所有圓的圓心坐標(biāo)在水平直線上。,畫(huà)布Canvas,import java.aw
61、t.*;import javax.swing.*;import java.awt.Color;//建立一個(gè)Canvas類的子類class MulOvalsCanvas extends Canvas{ private int oy; private int canvasWidth; //構(gòu)造方法中設(shè)置畫(huà)布尺寸 public MulOvalsCanvas(){ this.setSize(450,250);
62、 oy=(this.getHeight()-30)/2; canvasWidth=this.getWidth(); },畫(huà)布Canvas,//重寫(xiě)paint()方法 public void paint(Graphics g){ int ox=12; int r=10; //繪制水平直線 g.setColor(Color.RED); g.drawLine(0,oy,canvasWi
63、dth,oy); //沿水平直線繪制一系列的圓 g.setColor(Color.BLUE); //構(gòu)造循環(huán)體 while ((ox+r)<(canvasWidth-15)){ g.drawOval(ox-r,oy-r,2*r,2*r); r+=5; ox+=15; } }},畫(huà)布Canvas,public class Exa_10_11 extends JFr
64、ame{ //建立一個(gè)JPanel子類的對(duì)象 MulOvalsCanvas multipleOvals=new MulOvalsCanvas(); public Exa_10_11(String title){ super(title); this.setSize(450,250); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Con
65、tainer contentPane=this.getContentPane(); contentPane.add(multipleOvals); this.setVisible(true); } public static void main(String[] args){Exa_10_11 app=new Exa_10_11("Canvas Usage Demo");}},Java圖
66、像處理,靜態(tài)圖像處理 常用的圖像文件格式有BMP、JPEG、GIF、PNG等格式。圖像的基本操作 Java中處理圖像的基本操作主要包括:創(chuàng)建圖像對(duì)象,獲取圖像資源,加載圖像,顯示圖像等。,Java圖像處理,java.awt的Component類提供了一個(gè)createImage()方法來(lái)生成Image圖像對(duì)象。CreateImage()方法有兩種重載形式:①Image createImage(Image
67、Producer producer);方法的第一種形式從一個(gè)指定的圖像產(chǎn)生器producer創(chuàng)建一幅圖像并由方法返回。producer是一個(gè)現(xiàn)實(shí)了ImageProducer接口的類對(duì)象。②Image createImage(int width, int height);方法的第二種形式創(chuàng)建并返回一幅具有指定寬度和高度的空白圖像。,創(chuàng)建圖像對(duì)象,Java圖像處理,⑴獲取本地圖像資源通過(guò)java.awt.Toolkit類的靜態(tài)方法g
68、etDefaultToolkit(),獲得當(dāng)前默認(rèn)的Toolkit(工具包)對(duì)象,然后再使用Toolkit類的getImage()方法,就可以從指定的文件中讀取GIF、JPEG或PNG格式的圖像數(shù)據(jù)了。例如:從本機(jī)上獲取名為myPhoto.gif的文件內(nèi)容,并將文件中的圖像數(shù)據(jù)生成Image對(duì)象myPhoto的語(yǔ)句序列為:String fileName = “myPhoto.gif”;Image myPhoto = olkit.g
69、etDefaultToolkit().getImage(fileName);,獲取圖像資源,Java圖像處理,⑵獲取網(wǎng)絡(luò)圖像資源如果要獲取的圖像資源在網(wǎng)絡(luò)上,則需要使用URL類來(lái)得到圖像。Applet類提供了getCodeBase()方法,用以返回一個(gè)URL對(duì)象,該URL對(duì)象代表了applet小程序在網(wǎng)絡(luò)上地址。通常的做法為:用網(wǎng)絡(luò)地址與圖像文件名組成的字符串生成一個(gè)URL對(duì)象,然后使用Toolkit類的getImage()方法
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 圖形圖像處理matlab
- 圖形圖像處理圖像分割
- 單元七圖形圖像處理
- ps圖形圖像處理教案
- ps圖形圖像處理教案
- 多媒體課件圖形圖像處理
- 圖形圖像處理教學(xué)大綱
- 圖形圖像處理課程設(shè)計(jì)報(bào)告
- 圖形圖像處理的梯度場(chǎng)算法.pdf
- 任務(wù)3(新)photoshop 圖形圖像處理技術(shù)
- 地質(zhì)系 《圖形圖像處理》 教學(xué)大綱
- 圖形圖像處理綜合課程設(shè)計(jì)題目
- 任務(wù)photoshop 圖形圖像處理技術(shù)5(新)
- 第八章圖形圖像處理
- photoshopcs圖形圖像處理理論教學(xué)大綱
- 任務(wù)4photoshop 圖形圖像處理技術(shù)(新)
- photoshopcs4圖形圖像處理教程復(fù)習(xí)資料
- 基于生物視覺(jué)模型的圖形圖像處理方法.pdf
- 《photoshop圖形圖像處理》課程教學(xué)改革方案
- photoshopcs4圖形圖像處理教程復(fù)習(xí)資料
評(píng)論
0/150
提交評(píng)論