Java: 反鋸齒繪圖 Paint with graphics using anti-aliasing
大一的時候寫小遊戲時,發現Java顯示出來的大型中文字怎麼都不甚美觀,文字邊會有鋸齒狀,應該像遊戲一樣要anti aliasing一下才對嘛?可是到底要怎麼用,當時就沒繼續研究下去,直到今天才無在小範例中發現到它,都過這麼久了說起來還真是汗顏。
實際效果
範例程式碼
重要的就只是兩行,將Graphics強制轉成Graphics2D,利用setRenderingHint方法,設定反鋸齒的效果。
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
延伸資料
實際效果
範例程式碼
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JPanel;
import javax.swing.JFrame;
public class UnicodeText {
public static void main(String[] args) {
JFrame frm = new JFrame("反鋸齒效果 demo");
JPanel jpn = new JPanel(){
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
Font Anit = new Font("Monospace", Font.PLAIN, 62);
g2.setFont(Anit);
g2.drawString("沒用反鋸齒!!", 10, 50);
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.drawString("使用反鋸齒!!", 10, 145);
}
};
frm.add(jpn);
frm.setSize(350,200);
frm.setResizable(false);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
}
重要的就只是兩行,將Graphics強制轉成Graphics2D,利用setRenderingHint方法,設定反鋸齒的效果。
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
延伸資料
- Controlling Rendering Quality (The Java™ Tutorials > 2D Graphics > Advanced Topics in Java2D)
Sun官方的Java Tutorials教學文件中,關於Java2D Rebdering進階控制的解說部份。- Unleash Your Creativity with Swing and the Java 2D API!
Sun官方網站中的技術文件,有這篇非常好的講解文,也有提到反鋸齒的控制。
留言