Java學習之繪圖

    Java偏向於圖形化界面編程,當然就有圖像顯示之類的東西,圖形處理方面也是強項。

1、Graphics類

Graphics類是所有圖形上下文的抽象基類,它允許應用程序在組件以及閉屏圖像上進行繪製。Graphics類封裝了Java支持的基本繪圖操作所需的狀態信息,主要包括顏色、字體、畫筆、文本、圖像等

Graphics類提供了繪圖常用的方法,利用這些方法可以實現直線、矩形、多邊形、橢圓、圓弧等形狀和文本、圖片的繪製操作。另外,在執行這些操作之前,還可以使用相應的方法,設置繪圖的顏色、字體等狀態屬性。

g.drawRect(10, 10, 100, 50);
// 三角
int[] xs = {10, 50, 30};
int[] ys = {80, 80, 110};
g.drawPolygon(xs, ys, 3);
// 圓形
g.drawOval(130,10,80,80);
// 橢圓
g.drawOval(60,80,80,50);

2、Graphics2D類

使用Graphics類可以完成簡單的圖形繪製任務,但是它所實現的功能非常有限,例如無法改變線條的粗細、不能對圖片使用旋轉、模糊等過濾效果。

Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(4.0F));
g2.setColor(Color.BLUE);
g2.drawOval(10, 10, OVAL_WIDTH, OVAL_HEIGHT); // 繪製第1個圓形
g2.setStroke(new BasicStroke(8.0F));
g2.setColor(Color.CYAN);
g2.drawOval(130, 10, OVAL_WIDTH, OVAL_HEIGHT); // 繪製第2個圓形
g2.setStroke(new BasicStroke(2.0F));
g2.setColor(Color.GREEN);
g2.drawOval(250, 10, OVAL_WIDTH, OVAL_HEIGHT); // 繪製第3個圓形
g2.setStroke(new BasicStroke(5.0F));
g2.setColor(Color.MAGENTA);
g2.drawOval(70, 120, OVAL_WIDTH, OVAL_HEIGHT); // 繪製第4個圓形
g2.setStroke(new BasicStroke(9.0F));
g2.setColor(Color.ORANGE);
g2.drawOval(190, 120, OVAL_WIDTH, OVAL_HEIGHT); // 繪製第5個圓形
Date now=new Date();
String nowStr = String.format("%tY年%tm月%td日", new Date[]{now, now, now});
Font font = new Font("宋體",Font.BOLD,14);
g2.setFont(font);
g2.drawString(nowStr, 80, 300);

 3、設置顏色、畫筆、文本

使用Color類可以創建任何顏色的對象

Java2DGraphics2D類可以調用setStroke()方法設置筆畫的屬性,例如改變線條的粗細、使用實線還是虛線、定義線段端點的形狀、風格等

Java使用Font類封裝了字體的大小、樣式等屬性

Graphics2D類提供了drawString()方法,使用該方法可以實現圖形上下文的文本繪製,從而實現在圖片上顯示文字的功能

private Shape rect; // 矩形對象
private Font font; // 字體對象
private Date date; // 當前日期對象

rect = new Rectangle2D.Double(10, 10, 200, 80);
font = new Font("宋體", Font.BOLD, 16);
date = new Date();

Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.GREEN); // 設置當前繪圖顏色
g2.fill(rect); // 填充矩形
g2.setColor(Color.BLUE); // 設置當前繪圖顏色
g2.setFont(font); // 設置字體
g2.drawString("現在時間是", 20, 30); // 繪製文本
g2.drawString(String.format("%tr", date), 50, 60); // 繪製時間文本

4、繪製圖片及圖片處理

繪圖類不僅可以繪製圖形和文本,還可以使用drawImage()方法將圖片資源顯示到繪圖上下文中,而且可以實現各種特效處理,例如圖片的縮放、翻轉等。下面主要介紹如何顯示圖片,語法如下所示:

drawImage(Image img, int x, int y, ImageObserver observer)

Image img;

URL imgUrl = DrawImage.class.getResource("img.jpg");// 獲取圖片資源的路徑
img = Toolkit.getDefaultToolkit().getImage(imgUrl); // 獲取圖片資源

Graphics2D g2 = (Graphics2D) g;
g2.drawImage(img, 0, 0, this); // 顯示圖片

a.放大與縮小

想要實現圖片的放大與縮小則需要使用它的重載方法,語法如下所示:

drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)

該方法將img圖片顯示在xy指定的位置上,並指定圖片的寬度和高度屬性。方法中涉及到的參數說明如下表所示。

b.圖片翻轉

圖像的翻轉需要使用drawImage()方法的另一個重載方法,語法如下所示:

drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer)

c.圖片旋轉

圖像的旋轉需要調用Graphics2D類的rotate()方法,該方法將根據指定的弧度旋轉圖像,語法如下所示:

rotate(double theta)

theta:旋轉的弧度

            g2.rotate(Math.toRadians(15));
            g2.drawImage(img, 70, 10, 300, 200, this);// 繪製指定大小的圖片

d.圖片傾斜

可以使用Graphics2D類提供的shear()方法設置繪圖的傾斜方向,從而實現使圖像傾斜的效果,語法如下所示:

shear(double shx, double shy)

shx:水平方向的傾斜量

shy:垂直方向的傾斜量

            Graphics2D g2 = (Graphics2D) g;
            g2.shear(0.3, 0);
            g2.drawImage(img, 0, 0, 300, 200, this);// 繪製指定大小的圖片

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章