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


 

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

  • 使用抗鋸齒處理和微調(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);

畫線恢復到默認狀況:

  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直接拿來畫,效果是一樣的,還是有鋸齒(原因:像素太小導致)。
所以我們要對它設置各種呈現算法。

設置呈現算法語句:
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);


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

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();

  // ---------- 增加下面的代碼使得背景透明 -----------------
  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();
  }
 }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM