2013/01/16

Java Draw Circle

畫圓比較基本應用,注意繪畫image時不能重複繪畫,否則會有重疊的現象
等等會比較在Graphics和Graphics2D設定畫筆粗細會有何種變化,如果重複在image繪圖,圖會長的怎樣?




下面程式碼是第一個實驗,用來比較Graphics和Graphics2D設定畫筆粗細會有何種變化

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class Circle {
    public static void main(String[] args) throws IOException {
        BufferedImage bufferedImage = new BufferedImage(400, 400,
                BufferedImage.TYPE_INT_RGB);
        Graphics graphics = bufferedImage.createGraphics();
        graphics.setColor(Color.BLUE);
        graphics.setXORMode(Color.GRAY);
        graphics.drawArc(0, 0, 400, 400, 0, 360);
        ImageIO.write(bufferedImage, "jpeg", new File("test.jpeg"));

        BufferedImage bufferedImage2 = new BufferedImage(400, 400,
                BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics2d = bufferedImage2.createGraphics();
        graphics2d.setStroke(new BasicStroke(10));
        graphics2d.setColor(Color.BLACK);
        graphics2d.setXORMode(Color.PINK);
        graphics2d.drawArc(0, 0, 400, 400, 0, 360);
        ImageIO.write(bufferedImage2, "jpeg", new File("test2.jpeg"));

        BufferedImage bufferedImage3 = new BufferedImage(400, 400,
                BufferedImage.TYPE_INT_RGB);
        Graphics graphics2 = bufferedImage3.createGraphics();
        graphics2.setColor(Color.BLUE);
        graphics2.setXORMode(Color.GREEN);
        graphics2.drawArc(0, 0, 400, 400, 0, 360);
        ((Graphics2D) graphics2).setStroke(new BasicStroke(1000));
        ImageIO.write(bufferedImage3, "jpeg", new File("test3.jpeg"));
    }
}


bufferedImage是使用Graphics來繪畫一個圓形,Graphics本身沒有設定畫筆的方法,畫出來的圖如下

bufferedImage2是使用Graphics2D來繪畫一個圓形,Graphics2D有設定畫筆的方法『setStroke』,畫出來的圖如下



bufferedImage3是使用Graphics來繪畫一個圓形,Graphics2D就是從Graphics繼承而來的,試著強制轉型使用Graphics2D方法來設定畫筆,畫出來的圖如下


看來只能在Graphics2D才能設定畫筆了XDDD(或許是我太笨用不出來XD)

下面程式碼是第二個實驗,嘗試重複在image繪圖會出現怎樣的圖

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class Circle {
    public static void main(String[] args) throws IOException {
        BufferedImage bufferedImage = new BufferedImage(400, 400,
                BufferedImage.TYPE_INT_RGB);
        Graphics graphics = bufferedImage.createGraphics();
        graphics.setColor(Color.BLUE);
        graphics.setXORMode(Color.GRAY);
        graphics.drawArc(0, 0, 400, 400, 0, 360);
        ImageIO.write(bufferedImage, "jpeg", new File("test.jpeg"));

        Graphics2D graphics2d = bufferedImage.createGraphics();
        graphics2d.setStroke(new BasicStroke(10));
        graphics2d.setColor(Color.BLACK);
        graphics2d.setXORMode(Color.PINK);
        graphics2d.drawArc(0, 0, 400, 400, 0, 360);
        ImageIO.write(bufferedImage, "jpeg", new File("test2.jpeg"));

    }
}

第一個圖如下



第二個圖就會在第一張圖重複繪畫





參考資料:
http://hi.baidu.com/songxulu/item/473ae938ba03a7c9392ffaee
http://www.javaworld.com.tw/jute/post/view?bid=5&id=152045&sty=0
http://www.wretch.cc/blog/lhu94a/23992322
http://algs4.cs.princeton.edu/41undirected/Cycle.java.html