1 / 46

Draw - PowerPoint PPT Presentation

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

PowerPoint Slideshow about 'Draw' - neena

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

繪圖與動畫

Draw／Paint & Animation

• 顏色的設定有兩種方式

• 顏色常數

• 自行指定顏色

• 以R(ed)G(reen)B(lue)三原色自行配製

• R  0~255

• G  0~255

• B  0~255

• paint()方法

• 定義於Component類別中

• 要在容器上繪圖時，必須在程式中實作paint()方法，並提供一個Graphics類別的物件供繪圖之用

• 當元件需要繪圖時，Graphics物件g自動的傳給paint()方法

• 語法

public void paint(Graphics g)

• 畫線

drawLine(int x1, int y1, int x2, int y2)

• 畫矩形

drawRect(int x, int y, int width, int height)

• 畫實心矩形

fillRect(int x, int y, int width, int height)

• 畫圓角矩形

drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)

• 畫實心圓角矩形

fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)

• 畫弧

drawArc(int x1, int y1, int width, int height , int startangle , int arcAngle)

• 畫實心弧

fillArc(int x1, int y1, int width, int height , int startangle , int arcAngle)

• 畫圓

drawOval(int x, int y, int width, int height)

• 畫圓角矩形

fillOval(int x, int y, int width, int height)

• 畫多邊線

drawPolyline(int xPoints[], int ypoints[], int npoints)

• 畫多邊形

drawPolygon(int xPoints[], int ypoints[], int npoints)

• 畫實心多邊形

fillPolygon(int xPoints[], int ypoints[], int npoints)

• drawString(String str, int x, int y)

• drawString(String str, float x, float y)

• Graphics2D類別式一個抽象類別，繼承自Graphics類別，對幾何圖形提供「座標轉移」、「顏色控制」、「文字繪製」等等功能

• 提供給Graphics2D類別物件的座標是一個與設備無關的座標體系，稱為「用戶空間(user space)」，Graphics2D提供一個AffineTransform物件可將用戶空間的座標轉換為與設備有關的座標體系，稱為設備空間

• 每一個Graphics2D物件都結合一個GraphicsConfiguration物件，它定義繪製目標的特性，如繪點(pixel)的格式及解析度等特性

Graphics2D的主要屬性(1)

• paint屬性

public abstract void setPaint(Paint paint)

• 提供繪製圖形線條的顏色

Graphics2D的主要屬性(2)

• stroke屬性

public abstract void setStroke(Stroke s)

• 提供繪製圖形線條樣式

Graphics2D的主要屬性(2)

• 線條的樣式可由BasicStroke類別予以設定虛線樣式

BasicStroke(float width, int cap, int join, float miterlimit, float dash[], float dash_phase)

Graphics2D的主要屬性(3)

• font屬性

public abstract void setFont(Font font)

• 提供繪製文字的字型

Graphics2D的主要屬性(4、5)

• transform屬性

• 提供繪製圖形線條的座標轉換體系

• clip屬性

public abstract void setClip(int x, int y, int w, int h)

• 提供繪製圖形的邊界

• (x, y)左上角座標

• 圖形寬為w、高為h

Graphics2D的主要屬性(6)

• composite屬性

public abstract void setComposite(Composite comp)

• 提供兩個繪製圖形的重疊屬性

• setXORMode()

• 使用drawImage()方法

drawImage(Image img1, int x1, int y1, ImageObserver observer)

• 動畫的原理是一系列的圖片依一定的時間間隔依序顯示出來

• javax.swing的Timer介面即是用以控制時間間隔的類別

• 當要建立一個Timer類別物件時，必須提供兩個引數

• 延遲時間（以毫秒計）

Timer類別的建構子及常用方法

• 建構子

public Timer(int delay, ActionListener listener)

• 傾聽物件

• 事件

• public int getDelay() //傳回延遲時間

• public boolean isRepeats() //傳回是否一直重複

• public boolean isRunning() //傳回Timer物件是否正在執行

• public void restart() //重新啟動Timer物件

• public void setDelay() //設定延遲時間

• public void setRepeats() //設定是否一直重複

• public void start() //啟動Timer物件

• public void stop() //停止Timer物件之執行

• 放大與縮小影像

• 原始尺寸

g.drawImage(img1,x,y,this)

img1 : 影像檔名

x,y : 左上角座標位置

this : 目前所屬視窗容器

• 調整影像尺寸

g.drawImage(img1,x,y,w,h,this)

w : 影像寬度

h : 影像長度

• 翻轉影像

• 原始影像

g.drawImage(img1,x1,y1,x2,y2,0,0,ow,oh,this)

0,0,ow,oh : 原始影像左上角和右下角的相對影像位置

x2=x1+ow y2=y1+oh

• 上下翻轉

g.drawImage(img1,x1,y1,x2,y2,0,oh,ow,0,this)

將垂直座標交換

• 左右翻轉

g.drawImage(img1,x1,y1,x2,y2,ow,0,0,oh,this)

將水平座標交換

• 旋轉( rotate()方法 )

Graphics2D g2;

• 傾斜( shear()方法 )

Graphics2D g2;

g2.shear(shx, shy);

• shx : 水平方向的增量

• shy : 垂直方向的增量

• 平移( translate()方法 )

Graphics2D g2;

g2.translate(tx, ty);

• 目前的座標系統平移至tx, ty (新的原點座標)

• 影像處理技巧(續)

• 影像裁減

• 首先利用Graphics2D繪製圖形的方法建立Shape圖形物件(必須匯入java.awt.geom.*)

Shape sp1=new Ellipse2D.Double(100,100,250,150);

g2.draw(sp1);

• 接著使用setClip()方法以sp1為裁減區域

G2.setClip(sp1);

• 最後使用drawImage()方法根據sp1的區域範圍將影像顯示出來

Rectangle r1=sh1.getBounds();

g2.drawImage(img1,r1.x,r1.y,r1.width,r1.height,this);

Graphics2D圖形繪製主要方法

• draw()

public abstract void draw(Shape s)

• 繪製目前Graphics2D物件的圖形s輪廓

• fill()

public abstract void fill(Shape s)

• 填滿目前Graphics2D物件的圖形

• drawString()

• 參考前面【畫文字】部分

• drawImage()

• 參考前面【顯示圖形】部分

• Graphics2D的幾何圖形

• 定義於java.awt.geom程式套件中，因此程式必須匯入

import java.awt.geom.*;

• Point2D.Float(x, y)

Point2D.Float p1=new Point2D.Float(1.0f, 2.0f);

• Point2D.Double(x, y)

Point2D.Double p1=new Point2D.Double(3.0, 4.0);

Graphics2D的幾何圖形(續)

• 直線

• Line2D.Float

• Line2D.Double

• 矩形

• Rectangle2D.Float

• Rectangle2D.Double

• 圓角矩形

• RoundRectangle2D.Float

• RoundRectangle2D.Double

Graphics2D的幾何圖形(續)

• 弧形

• Arc2D.Float

• Arc2d.Double

• 橢圓形

• Ellipse2D.Float

• Ellipse2D.Double

選擇器(chooser)

• 色彩選擇器

• javax.swing.JColorChooser

JColorChooser cc1=new JColorChooser();

Or

color1=showDialog(sample.this,“選取顏色”,color1);

選擇器(chooser)(續)

• 檔案選擇器

• javax.swing.JFileChooser

必須匯入import javax.swing.filechooser.*;

JFileChooser fc1=new JFileChooser();

fc1.showOpenDialog(new JFrame());

• 開啟檔名的指定

File file1; //必須匯入 java.io.*;

file1=fc1.getSeletedFile();

String fname;

fname=file1.getName();