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

相关文章
相关标签/搜索