强制Java2D子像素抗锯齿

时间:2010-05-05 18:30:13

标签: java linux antialiasing

我正在使用Java2D生成带有文本的图像。这些字体在运行Ubuntu的服务器上使用错误的抗锯齿进行可怕的渲染,但在OSX和Ubuntu工作站上渲染得非常漂亮。我猜两个Ubuntu安装的区别是xwindows vs no xwindows?也许?无论如何,我想我的渲染提示被忽略了,并且java 1.6子像素抗锯齿算法没有在服务器上使用。

我的渲染提示如下。我正在优化垂直放置的显示器。

g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_VRGB);

我正在直接从ttf文件创建字体,这确实改善了渲染。我不认为机器上安装了字体,所以它默认为其他东西。现在字体是正确的但抗锯齿仍然是关闭的。它看起来比我完全关闭抗锯齿并生成图像时更好看,所以我认为它正在做一些事情,但它看起来不太好。

我尝试过Java属性

-Dawt.useSystemAAFontSettings=lcd

但它没有改变任何东西。

有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:2)

你有没有试过这样的事情:

public void paintComponent(Graphics g){
  @SuppressWarnings("unchecked")
  Map<String, String> desktopHints = (Map<String, String>) Toolkit
    .getDefaultToolkit().getDesktopProperty("awt.font.desktophints");
  Graphics2D g2d = (Graphics2D) g;
  if(desktopHints != null){
    g2d.addRenderingHints(desktopHints);
  }
  g2d.drawString("text", 10, 10);
}

Graphics中收到的paintComponent()对象设置的默认值与桌面属性(监视器类型)无关。查询desktophints的工具包将从底层操作系统返回有关所用硬件的信息。比较“肮脏的富客户”,第59页。