Java: 反鋸齒繪圖 Paint with graphics using anti-aliasing

大一的時候寫小遊戲時,發現Java顯示出來的大型中文字怎麼都不甚美觀,文字邊會有鋸齒狀,應該像遊戲一樣要anti aliasing一下才對嘛?可是到底要怎麼用,當時就沒繼續研究下去,直到今天才無在小範例中發現到它,都過這麼久了說起來還真是汗顏。

實際效果

範例程式碼
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);


延伸資料

留言

匿名表示…
感謝, 很有用