麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

Java Graphics2D類的繪圖方法

2019-11-15 01:03:13
字體:
來源:轉載
供稿:網友
java Graphics2D類的繪圖方法

Graphics2D繼承自Graphics,它擴展了Graphics的繪圖功能,擁有更強大的二維圖形處理能力,提供對幾何形狀、坐標轉換、顏色管理以及文字布局等更精確的控制。

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

圖形狀態屬性用特定的對象存儲。


常用繪圖屬性

stroke屬性

我們可以調用調用如下方法來設置stroke屬性:public abstract void setStroke(Stroke s)

stroke屬性用于控制線條的寬度、筆形樣式、線段連接方式或短劃線圖案。

如果我們要設置stroke屬性,則應當先創建Stroke引用的對象,但由于Stroke為接口類型,所以我們要創建對象,可以創建其已知實現類BasicStroke的對象。

BasicStroke常用的構造方法有:// 構造一個具有指定屬性的實心的 BasicStrokepublic BasicStroke(float width, int cap, int join)

// 構造一個具有指定線條寬度以及 cap 和 join 風格為默認值的實心 BasicStrokepublic BasicStroke(float width)

cap是端點樣式,可取值為:CAP_BUTT(無修飾),CAP_ROUND(半徑等于畫筆寬度一半的圓形裝飾末端),CAP_SQUARE(正方形末端,默認值)。

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

clip屬性

clip屬性用于實現剪裁效果。設置剪裁屬性可調用如下方法確定剪裁區的Shape:public abstract void setClip(int x, int y, int width, int height)

連續多個setClip()得到它們交集的剪裁區。

paint屬性

paint屬性控制填充效果,通過調用setPaint()方法設置:public abstract void setPaint(Paint paint)

paint可以同時作用在邊線和填充上,可以是單色,漸變和圖案,任何paint都需要實現java.awt.Paint接口。因為Color類實現了java.awt.Paint接口,所有的Color對象都是Paint對象。

GradientPaint類:public GradientPaint(float x1, float y1, Color color1, float x2, float y2, Color color2)

這個類用顏色漸變填充一個區域,構造函數指定定比例和顏色。圖形引擎會從第一個點到第二個點之間線性變化兩個顏色:從(x1,y1)到(x2,y2)顏色從c1漸變到c2。我們還可以指定顏色圖案是否允許重復。


TexturePaint類:public TexturePaint(BufferedImage txtr, Rectangle2D anchor)

這個類平鋪一個圖像來填充圖形,構造函數接收一個java.awt.image.BufferedImage和一個Rectangle2D,把圖像影射到矩形里,然后平鋪矩形。

我們可以先創建GradientPaint類或TexturePaint類的對象,再調用Graphics2D的setPaint()方法設置填充效果。

Font屬性

所有的文本都使用能表現文字的樣式圖形渲染。當前的字體決定了字體的形狀。使用繼承自java.awt.Graphics的getFont()方法和setFont()方法來操縱字體。盡管設置字體相對簡單的工作,Java 2D還是為文本描繪提供了豐富的選項。

Transform屬性

transform屬性用來實現常用的圖形平移、縮放和斜切等變換操作。我們可以調用setTransform()來設置transform屬性:public abstract void setTransform(AffineTransform Tx)

該方法需要一個AffineTransform對象的參數,所以首先創建AffineTransform對象,然后調用setTransform()方法設置transform屬性。最后,用具有指定屬性的Graphics2D對象繪制圖形。

創建AffineTransform對象的方法有:// 旋轉變換,旋轉theta弧度public static AffineTransform getRotateInstance(double theta)

// 繞旋轉中心(anchorx, anchory)旋轉public static AffineTransform getRotateInstance(double theta, double anchorx, double anchory)

// 縮放變換,x和y方向分別按sx,sy比例變換public static AffineTransform getScaleInstance(double sx, double sy)

// 錯切變換,shx和shy指定斜拉度public static AffineTransform getShearInstance(double shx, double shy)

// 平移變換,tx和ty表示x和y方向平移距離public static AffineTransform getTranslateInstance(double tx, double ty)

當然,也可以先創建一個沒有transform屬性的AffineTransform對象,然后用以下方法指定圖形平移、旋轉、縮放變換屬性:// 將圖形在x軸方向平移tx像素,y軸方向平移ty像素public void translate(double tx, double ty)

// 旋轉theta弧度public void rotate(double theta)

// 圖形以點(anchorx, anchory)為軸點,旋轉theta弧度public void rotate(double theta, double anchorx, double anchory)

// 圖形在x軸方向縮放sx倍,縱向縮放sy倍public void scale(double sx, double sy)

composit屬性

composit屬性設置圖形重疊區域的效果。可通過調用setComposite()方法設置該屬性:public abstract void setComposite(Composite comp)

例如先用方法AlphaComposite.getInstance(int rule, float alpha)得到AlphaComposite對象,再通過setComposite()方法設置混合效果。AlphaComposite在圖形和圖像中實現混合和透明效果,Alpha值的范圍為0.0f(完全透明)-1.0f(完全不透明)。


使用Graphics2D繪圖

Graphics2D類仍然保留Graphics類的繪圖方法,同時增加了許多新方法。新方法將幾何圖形(線段、圓等)作為一個對象來繪制。在java.awt.geom包中聲明的一系列類,分別用于創建各種身體圖形對象。常用的主要有:?Line2D - 線段類?RoundRectangle2D - 圓角矩形類?Ellipse2D - 橢圓類?Arc2D - 圓弧類?QuadCurve2D - 二次曲線類?CubicCurve2D - 三次曲線類。

要用Graphics2D類的新方法畫一個圖形。先在重畫方法paintComponent()或paint()中,把參數對象g強制轉換成Graphics2D對象;然后,用上述圖形類提供的靜態內部類構造方法Double()或Float()創建該圖形的對象;最后,以圖形對象為參數調用Graphics2D對象的draw()方法繪制這個圖形。

畫一條線段:/* 畫線 */Stroke s = new BasicStroke(20, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER);g2d.setStroke(s); Line2D line = new Line2D.Double(30,50,100,200);g2d.draw(line);

畫一個圓角矩形:/* 畫圓角矩形 */g2d.setColor(Color.BLUE);RoundRectangle2D rect = new RoundRectangle2D.Double(100, 50, 100, 50, 4, 4);g2d.draw(rect);

畫一個旋轉一定角度的矩形:/* 畫旋轉一定角度的矩形 */Rectangle2D rect2 = new Rectangle2D.Double(60, 160, 60, 90);AffineTransform transform = new AffineTransform();transform.rotate(45 * Math.PI / 180, 90, 200); // 圍繞(90,200)點旋轉圖形45度g2d.setTransform(transform);g2d.draw(rect2);


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产91精品久久久久久久 | 国产一区二区三区黄 | 精品黑人一区二区三区国语馆 | 国产一区精品在线观看 | 猫咪av在线 | 欧美黄色片一级 | 97伦理 | 黄色av片三级三级三级免费看 | 91精品国产91 | 欧美日韩国产成人在线观看 | 成人在线观看小视频 | 久久羞羞视频 | 12av电影 | 日韩激情一区 | 精品亚洲视频在线 | 国产精选久久 | 欧美乱淫| 中国女警察一级毛片视频 | 色妇视频| 欧美色视| 99re久久最新地址获取 | 国产午夜三级一区二区三桃花影视 | 中国av免费观看 | 欧美视频在线一区二区三区 | 男人久久天堂 | 国产99一区二区 | 在线观看免费视频麻豆 | 久久久精品视频免费 | 久久国产免费视频 | 色屁屁xxxxⅹ在线视频 | 性少妇chinesevideo | 成年人黄视频 | 国产精品久久久久久久久久10秀 | 天天操很很操 | 国产成年人视频 | 国产正在播放 | 欧美一级黄带 | 欧美日韩大片在线观看 | 精品一区二区三区免费爱 | 亚洲成人在线免费 | av电影在线观看免费 |