【问题标题】:Font.createFont + Anti-AliasingFont.createFont + 抗锯齿
【发布时间】:2011-07-05 21:13:19
【问题描述】:

我在一个 JAR 存档中捆绑了一个 .ttf 字体,我按照以下方式通过例程加载它:

[snip]
is = IdeUiUtil.class.getResourceAsStream(fontName);
font = Font.createFont(Font.TRUETYPE_FONT, is);
font = font.deriveFont(style, size);
[snip]

更新:该字体用于TitledBorder 的标题中,最终还将用于JLabels 中。

问题是,在 Window 平台上它看起来很锯齿。在 linux 上,它很好地消除了锯齿。我该怎么做才能在 Windows 上也消除锯齿?

【问题讨论】:

  • 这是一个相当古老的问题,但我遇到了完全相同的问题。如果我从输入流加载字体(并在 GraphicsEnvoronment 上注册),无论使用何种渲染提示,该字体都不会抗锯齿。特别是如果该字体未在运行时加载但仅在系统字体下可用,则该字体是抗锯齿的。这似乎是 Java 中的一个错误。

标签: java fonts truetype


【解决方案1】:

如果您使用 Graphics 进行绘图,则应使用:

Graphics2D g2d = (Graphics2D)getGraphics();
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

...但这并不特定于捆绑字体:它适用于与 Graphics 对象一起使用的所有字体。

有一个hack 可以将此应用到面板,但我不确定它是否是最新的。

【讨论】:

  • 对于最近的JDK,Stackoverflow上也有提示:stackoverflow.com/q/179955/438970
  • 好吧,除了我设置加载字体的 TitledBorder 之外,似乎所有东西都启用了 AA。我还尝试将此字体设置到其他组件(在本例中为 JLabels),并注意到它们也没有消除锯齿。如果我使用系统字体,例如“Arial”,则组件会正确呈现。但我会给你的提示...
猜你喜欢
  • 2014-02-18
  • 1970-01-01
  • 2016-06-28
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
相关资源
最近更新 更多