代码之家  ›  专栏  ›  技术社区  ›  rince

自Java 7u13以来,未使用Graphics2D drawString呈现字体轮廓

  •  6
  • rince  · 技术社区  · 7 年前

    由于Java 7u13,每当字体的字符/字形宽度大于其高度的4倍时,就根本不会使用图形2D进行渲染。抽绳(例如,字形4001em宽,基本字号1000em):

    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D)g;
        g2.setFont(new Font("myFontWithWideGlyphForX", Font.PLAIN, 12));
        g2.drawString("XXXX", 10, 10);
    }
    

    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D)g;
        g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
        RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
        g2.setFont(new Font("myFontWithWideGlyphForX", Font.PLAIN, 12));
        g2.drawString("XXXX", 10, 10);
    }
    

    在设置子像素atialiasig并正确渲染字体后,渲染算法的工作方式似乎有所不同。

    如果切换到Java 7u11或更早版本,则文本渲染不会出现任何问题,也不会设置值\u text\u antialas\u LCD\u HRGB。

    http://www.fontspace.com/digital-magic/hdgems5 -它可以用Java 7u11渲染,但不能用比它更新的任何东西渲染。

    设置子像素抗锯齿值_TEXT\u antialas\u LCD\u HRGB只是为了呈现字体似乎有点粗糙、难看,而且并不总是可能(例如,在使用第三方libs时)。有谁知道自7u13以来awt没有呈现这样的角色的原因是什么?这样的字体不受支持吗?或者这是一个bug?

    1 回复  |  直到 7 年前
        1
  •  1
  •   rince    7 年前

    我无法得到关于这个问题的答案,但我确实找到了解决方法。

    然而,otf字体似乎工作正常,即使有如此宽的字形,因此作为一种解决方法,字体刚刚转换为otf。