當前位置 : IT培訓網 > Java開發 > Java教程 > Java編程 Graphics2D類的繪圖方法

Java編程 Graphics2D類的繪圖方法

時間:2016-09-02 17:16:40??來源:Java培訓網??作者:IT培訓網??已有:名學員訪問該課程
Graphics2D定義了幾種方法,用于添加或改變圖形的狀態屬性。可以通過設定和修改狀態屬性,指定畫筆寬度和畫筆的連接方式;設定平移、旋轉、縮放或修剪變換圖形;以及設定填充圖形的顏色和圖

現在都講究立體的效果,Graphics2D類的繪圖方式就屬于高級繪圖了,在我們日常生活中經常提到的2d、3d電影都是立體的,而編程語言也是一樣,可以實現2d的效果哦,下面就讓我們一起來學習下吧!

Java語言在Graphics類提供繪制各種基本的幾何圖形的基礎上,擴展Graphics類提供一個Graphics2D類,它擁用更強大的二維圖形處理能力,提供、坐標轉換、顏色管理以及文字布局等更精確的控制。

繪圖屬性

Graphics2D定義了幾種方法,用于添加或改變圖形的狀態屬性。可以通過設定和修改狀態屬性,指定畫筆寬度和畫筆的連接方式;設定平移、旋轉、縮放或修剪變換圖形;以及設定填充圖形的顏色和圖案等。圖形狀態屬性用特定的對象存儲。

1. stroke屬性

stroke屬性控制線條的寬度、筆形樣式、線段連接方式或短劃線圖案。該屬性的設置需要先創建BasicStroke對象,再調用setStroke()方法來設置。創建BasicStroke對象的方法有:

BasicStroke(float w):指定線條寬w。

BasicStroke(float w,int cap, int join):

cap是端點樣:CAP_BUTT(無修飾),CAP_ROUND(半圓形末端),CAP_SQUARE(方形末端,默認值)。

Join定義兩線段交匯處的連接方式:JOIN_BEVEL(無修飾),JOIN_MTTER(尖形末端,默認值),JOIN_ROUND(圓形末端)。

2. paint屬性

paint屬性控制填充效果。先調用以下方法確定填充效果,理用setPaint()方法設置。

GradientPaint(float x1,float y1,Color c1,float x2,flaot y2,Color c2):從(x1,y1)到(x2,y2)顏色從c1漸變到c2。其中:參數c1,c2決定這個漸變色是從顏色c1漸變到顏色c2。參數x1,y1,x2,y2決定了漸變的強弱,即要求從點(x1,y1)出發到達點(x2,y2),顏色從c1變成c2。

GradientPaint(float x1,float y1,Color c1,float x2,float y2,Color c2,Boolean cyclic):如果希望漸變到終點又是起點的顏色,應將cyclic設置為true。

3. clip屬性

clip屬性用于實現剪裁效果。設置剪裁屬性可調用setClip()方法確定剪裁區的Shape。連續多個setClip()得到它們交集的剪裁區。

4. transform屬性

transform 屬性用來實現常用的圖形平移、縮放和斜切等變換操作。首先創建AffineTransform對象,然后調用setTransform()方法設置transform屬性。最后,用具有指定屬性的Graphics2D對象繪制圖形。創建AffineTransform對象的方法有:

getRotateinstrance(double theta):旋轉theta弧度。

getRotateInstance(double theta,dioble x,double y):繞旋轉中心(x,y)旋轉。

getScaleInstance(double sx,double sy):x和y 方向分別按sx,sy比例變換。

getTranslateInstance(double tx,double ty):平移變換。

getShearInstance(double shx,double shy):斜切變換,shx和shy指定斜拉度。

也可以先創建一個沒有transform屬性的AffineTransform對象,然后用以下方法指定圖形平移、旋轉、縮放變換屬性。

transelate(double dx,double dy):將圖形在x軸方向平移dx像素。

scale(double sx,double sy):圖形在x軸方向縮放sx倍,縱向縮放sy倍。

rotate(double arc,double x, double y):圖形以點(x,y)為軸點,旋轉arc弧度。

例如,創建AffineTransform對象:

AffineTransform trans = new AffineTransform();

為AffineTransform對象指定繞點旋轉變換屬性:

Trans.rotate(50.0*3.1415927/180.0,90,80);

接著為Graphics2D 的對象g2d設置具有上述旋轉變換功能的“畫筆”:

Graphics2D g2d = (Graphics2D)g;g2d.setTranstorm(trans);

最后,以圖形對象為參數調用具有變換功能的Graphics2D 對象的draw()方法。例如,設已有一個二次曲線對象curve,以下代碼實現用上述旋轉功能的g2d對象繪制這條二次曲線:

g2d.draw(curve);

5. composit屬性

composit屬性設置圖形重疊區域的效果。先用方法AlphaComposite.getInstance(int rule, float alpha)得到AlphaComposite對象,再通過setComposite()方法設置混合效果。Alpha值的范圍為0.0f(完全透明)-0.1f(完全不透明)。

Graphics2D類的繪圖方法

Graphics2D類仍然保留Graphics類的繪圖方法,同時增加了許多新方法。新方法將幾何圖形(線段、圓等)作為一個對象來繪制。在java.awt.geom包中聲明的一系列類,分別用于創建各種身體圖形對象。主要有:

Line2D線段類,RoundRectangle2D圓角矩形類,Ellipse2D橢圓類,Arc2D圓弧類,QuadCurve2D二次曲線類,CubicCurve2D三次曲線類。

要用Graphics2D類的新方法畫一個圖形。先在重畫方法paintComponent()或paint()中,把參數對象g強制轉換成Graphics2D對象;然后,用上述圖形類提供的靜態方法Double()創建該圖形的對象;最后,以圖形對象為參數調用Graphics2D對象的draw()方法繪制這個圖形。例如以下代碼用Graphics2D的新方法繪制線段和圓角矩形:

Graphics2D g2d = (Graphics2D)g;//將對象g類型從Graphics轉換成Graphics2D

Line2D line = new Line2D.Double(30.0,30.0,340.0,30.0);

g2d.draw(line);

RoundRectangle2D rRect = new RoundRectangle2D.Double(13.0,30.0,100.0,70.0,40.0,20.0);

g2d.draw(rRect);

也可以先用java.awt.geom包提供的Shape對象,并用單精度Float坐標或雙精度Double坐標創建Shape對象,然后再用draw()方法繪制。例如,以下代碼先創建圓弧對象,然后繪制圓弧:

Shape arc = new Arc2D.Float(30,30,150,150,40,100,Arc2D.OPEN);

g2d.draw(arc)/繪制前面創建的圖形對象arc

Graphics2D的幾何圖形類

線段

Line2D line = new Line2D.Double(2,3,200,300);//聲明并創建線段對象

//起點是(2,3),終點是(200,300)

矩形

Rectangle2D rect = new Rectangle2D.Double(20,30,80,40);//聲明并創建矩形對象,矩形的左上角是(20,30),寬是300,高是40

橢圓

Ellipse2D ellipse = new Ellipse2D.Double(20,30,100,50);

//左上角 (20,30),寬是100,高是50

圓弧

Arc2D arc1 = new Arc2D.Double(8,30,85,60,5,90,Arc2D.OPEN);

//外接矩形的左上角(10,30),寬85,高60,起始角是5度,終止角是90度

Arc2D arc2 = new Arc2D.Double(20,65,90,70,0,180,Arc2D.CHORD);

Arc2D arc3 = new Arc2D.Double(40,110,50,90,0,270,Arc2D.PIE);

參數Arc2D.OPEN、Arc2D.CHORD、Arc2D.PIE分別表示圓弧是開弧、弓弧和餅弧。

圓角矩形

RoundRectangle2D rectRound = new RoundRectangle2D.Double(20,30,130,100,18,15);

//左上角是(20,30),寬是130,高是100,圓角的長軸是18,短軸是15。

二次曲線

二次曲線用二階多項式表示:

y(x)=ax2+bx+c

一條二次曲線需要三個點確定:始點、控制點和終點。

QuadCurve2D curve1 = new QuadCurver2D.Double(20,10,90,65,55,115);

QuadCurve2D curve2 = new QuadCurver2D.Double(20,10,15,63,55,115);

QuadCurve2D curve3 = new QuadCurver2D.Double(20,10,54,64,55,115);

方法Double()中的6個參數分別是二次曲線的始點、控制點和終點。以上3條二次曲線的開始點和終點分別相同。

三次曲線

三次曲線用三階多項式表示:

y(x)=ax3+bx2+cx+d

一條三次曲線需要四個點確定:始點、兩個控制點和終點。

CubicCurve2D curve1 = new CubicCurve2D.Double(12,30,50,75,15,15,115,93);

CubicCurve2D curve2 = new CubicCurve2D.Double(12,30,15,70,20,25,35,94);

CubicCurve2D curve3 = new CubicCurve2D.Double(12,30,50,75,20,95,95,95);

方法Double()中的8個參數分別是三次曲線的始點、兩個控制點和終點。

一般的方程曲線的繪制過程用一個循環控制。通過循環產生自變量的值,按照方程計算出函數值,再作必要的坐標轉換:原點定位的平移變換,圖像縮小或放大的縮放變換,得到曲線的圖像點,并繪制這個點。以繪制以下曲線方程為例:

Y=sin(x)+cos(x),x

繪制的部分代碼可以寫成如下:

double x0,y0,x1,y1,x2,y2,scale;

x0=100;y0=80;

scale =20.0;

for(x1=-3.1415926d;x1<=2*3.1415926d;x1+=0.01d){

y1=Math.sin(x1)+Math.cos(x1);

x2=x0+x1*scale;y2=y0+y1*scale;//(x2,y2)是圖像點

g.fillOval((int)x2,(int)y2,1,1);//畫一個圓點作為圖像點

}

頂一下
(2)
50%
踩一下
(2)
50%
------分隔線----------------------------
------分隔線----------------------------
Java教程
1、Java 概述
1.1 Java語言概述
1.2 Java虛擬機以及跨平臺原理
1.3 Java的主要就業方向
1.4 Java的不同版本
1.5 Java開發環境搭建
1.6 第一個Java程序示例
1.7 Java類和對象的概念
1.8 Java類庫及其組織結構
1.9 Java import
2、Java 語法基礎
2.1 Java數據類型以及變量的定義
2.2 Java數據類型轉換
2.3 Java運算符
2.4 Java流程控制
2.5 Java數組的定義和使用
2.6 Java字符串(String)
2.7 Java StringBuffer與StringBuider
2.8 強調一下編程風格
3、Java 類與對象
3.1 Java類的定義及其實例化
3.2 Java訪問修飾符
3.3 Java變量的作用域
3.4 Java this關鍵字詳解
3.5 Java方法重載
3.6 Java類的基本運行順序
3.7 Java包裝類、拆箱和裝箱詳解
3.8 再談Java包
3.9 源文件的聲明規則
4、Java 繼承和多態
4.1 繼承的概念與實現
4.2 Java super關鍵字
4.3 繼承中的方法的覆蓋和重載
4.4 多態和動態綁定
4.5 instanceof 運算符
4.6 多態對象的類型轉換
4.7 Java static關鍵字
4.8 Java final關鍵字
4.9 Java Object類
5、面向對象高級特性
5.1 Java內部類及其實例化
5.2 內部類的分類
5.3 抽象類的概念和使用
5.4 接口的概念和使用
5.5 接口和抽象類的區別
5.6 Java 泛型
5.7 泛型通配符和類型參數的范圍
6、異常處理
6.1 異常處理基礎
6.2 異常類型Java語言中常見的異常類型有哪些
6.3 未被捕獲的異常
6.4 try和catch的使用
6.5 多重catch語句的使用
6.6 try語句的嵌套
6.7 throw:異常的拋出
6.8 throws子句
6.9 finally塊
6.10 Java的內置異常
6.11 創建自己的異常子類
6.12 斷言
7、線程編程
7.1 線程的概念
7.2 Java線程模型
7.3 主線程
7.4 創建線程
7.5 創建多線程
7.6 isAlive()和join()的使用
7.7 線程優先級
7.8 線程同步
7.9 線程間通信
7.10 線程死鎖
7.11 線程的掛起、恢復和終止
8、輸入輸出(IO)操作
8.1 輸入輸出基本概念
8.2 面向字符的輸入流
8.3 面向字符的輸出流
8.4 面向字節的輸入輸出流
8.5 面向字節流的應用
8.6 文件與目錄管理
8.7 文件的隨機讀寫
8.8 文件的壓縮處理
9、常用類庫、向量與哈希
9.1 Java基礎類庫
9.2 Object類
9.3 Java語言包(java.lang)簡介
9.4 日期和時間類
9.5 向量及其應用
9.6 哈希表及其應用
10、圖形界面(GUI)設計
10.1 圖形界面設計基礎
10.2 框架窗口
10.3 標簽、按鈕和按鈕事件
10.4 面板
10.5 布局設計
10.6 文本框和文本區
10.7 文本框和文本區的輸入輸出
10.8 選擇框和單選按鈕
10.9 列表和組合框
10.10 菜單
10.11 對話框
10.12 滾動條
10.13 鼠標事件
10.14 鍵盤事件
11、圖形、圖像與多媒體
11.1 繪圖基礎
11.2 設置字型和顏色
11.3 繪圖模式
11.4 Graphics類的繪圖方法
11.5 Graphics2D類的繪圖方法
11.6 圖像處理基礎
11.7 圖像緩沖技術
11.8 多媒體基礎
12、網絡與數據庫編程
12.1 IP地址和InetAddress類
12.2 統一資源定位符
12.3 套接字(Socket)
12.4 數據庫連接
12.5 幾個重要的類和接口
12.6 數據庫查詢
12.7 數據庫更新
12.8 插入記錄
12.9 修改記錄
12.10 刪除記錄
激情色播