java Graphics2d消除鋸齒,使字體平滑顯示

 

 Java 2D API 提供的文本處理功能進行美化。Java 2D API 的文本功能包括:java

  • 使用抗鋸齒處理和微調(hinting)以達到更好的輸出質量
  • 可使用系統安裝的全部字體
  • 能夠將對圖形對象的操做(旋轉、縮放、着色、剪切等等)應用到文本上。
  • 支持向字符串添加內嵌屬性(如字體、尺寸、深淺,甚至圖像)
  • 支持雙向文本(啓用從右到左的字符順序,就象您在阿拉伯語和希伯來語中可能遇到的同樣)
  • 第一光標和第二光標可以瀏覽同時包含從右到左和從左到右字符順序的文本。
  • 先進的字體度量功能,超過舊的 java.awt.FontMetrics 類中的相應功能
  • 排版功能能夠實現單詞換行和調整多行文本

這個 API 的核心是由 java.awt.Graphics2D 類提供的,該類是 java.awt.Graphics 的一個子類。API 的其它部分由 java.awt 層次結構中的其它包提供,包括 java.awt.color 、 java.awt.font 和 java.awt.geom 。算法

 

 

畫線平滑:字體

  1. g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
  2.  
    g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,RenderingHints.VALUE_STROKE_DEFAULT);

畫線恢復到默認情況:spa

  1. g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
  2.  
    g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,RenderingHints.VALUE_STROKE_PURE);  

 

 

Graphics2d擁有比graphics更爲強大的畫圖方法
因此在畫圖時,咱們要使用的畫筆是Graphics2D。
可是,Graphics2D直接拿來畫,效果是同樣的,仍是有鋸齒(緣由:像素過小致使)。
因此咱們要對它設置各類呈現算法。code

設置呈現算法語句:
BufferedImage img=new BufferedImage(什麼什麼什麼);
Graphics2D g2 = img.createGraphics();//得到一個Graphics2D對象
【設置抗鋸齒屬性】對象

//消除文字鋸齒
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
//消除畫圖鋸齒字符串

g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);get


在上面的【設置抗鋸齒屬性】中,粗體你照寫就能夠了,細的是能夠替換的
消文字鋸齒:RenderingHints.KEY_TEXT_ANTIALIASING
消繪圖鋸齒:RenderingHints.KEY_ANTIALIASING
選你須要的填進去就能夠了,而後就能夠繪圖消鋸齒了。
實例代碼以下:it

public class CompoundTileTools {
 public static void main(String[] args) {
  int width = Constants.s_width_gps;
  int height = Constants.s_height_gps;
  // 建立BufferedImage對象
  BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  // 獲取Graphics2D
  Graphics2D g2d = image.createGraphics();io

  // ---------- 增長下面的代碼使得背景透明 -----------------
  image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
  g2d.dispose();
  g2d = image.createGraphics();
  // ---------- 背景透明代碼結束 -----------------
  
  //消除鋸齒
  g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

  // 畫圖
  g2d.setColor(new Color(255, 0, 0));
  // 指定繪製線的寬度(多粗)
  g2d.setStroke(new BasicStroke(2));
  // 指定繪製線的起點和終點
  g2d.drawLine(412, 253, 392, 252);

  // 釋放對象  g2d.dispose();  // 保存文件  try {   ImageIO.write(image, "png", new File("D:/test/test1.png"));  } catch (IOException e) {   e.printStackTrace();  } }}

相關文章
相關標籤/搜索