Java 2d drawString不规则字母间距

时间:2014-12-11 09:11:38

标签: java swing awt graphics2d

enter image description here

请仔细查看图片。这是它的创建方式:

BufferedImage ret = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
Graphics2D g = ret.createGraphics();
Map<TextAttribute, Object> attributes = new HashMap<TextAttribute, Object>();
attributes.put(TextAttribute.TRACKING, -0.120F);
attributes.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
Font arial = new Font("Arial", Font.PLAIN, 10).deriveFont(attributes);
g.setFont(arial);
g.setColor(Color.BLUE);
g.drawString("Pumps", 0, 20);

我的问题是&#39; P&#39;并且&#39; u&#39;相比之下,“你好”之间没有空间。并且&#39; m&#39;。字母之间的空格差异在任何文本或图像处理软件中都不存在。我做错了吗?对具有文本绘图功能的备用Java库的快速研究是不成功的。

1 个答案:

答案 0 :(得分:3)

TextAttribute.TRACKING的Javadoc说:

  

跟踪值乘以字体点大小并通过字体转换以确定要添加到每个字形群集的前进的附加量。正跟踪值将抑制可选连字的形成。跟踪值通常在-0.1和0.3之间;超出此范围的值通常是不可取的。

你用-0.12略微推动你的运气。

但是,如果您尝试使用如此少的像素绘制文本,那么基本上没有什么可以做的。如果你放大那些小的文本,它总是看起来很糟糕。

你应该打开子像素渲染:假设你在支持它的屏幕上,这将使它看起来更好。你现在已经有了灰度。