首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX字体呈现中的错误字符间距(kerning) (在Linux中)

JavaFX字体呈现中的错误字符间距(kerning) (在Linux中)
EN

Stack Overflow用户
提问于 2018-03-06 16:54:59
回答 2查看 1.5K关注 0票数 6

我已经开始用JavaFX开发一个应用程序,我在一个问题上运行过,我几乎找不到有用的信息: Linux中字符之间的间隔非常不均匀。我说的不是不同字符的宽度,而是字符之间的空格。

它在普通文本中是可见的,但下面的示例说明效果比普通文本更好。看一下第一排。前两个字符之间的空格小于第二个和第三个字符之间的空格。这也发生在第六和第七个字符与其他几个字符之间:

Swing没有这个问题,JavaFX在Windows中也没有这个问题,或者在那个操作系统上几乎看不见。这似乎也不是Mac上的一个主要问题。作为比较,下面是一个运行OSX10.12.6和Java9.0.4的Mac Pro,2014年年中的示例输出:

有人知道这是否是JavaFX字体呈现引擎中的一个bug吗?如果是的话,有解决办法吗?

我真的开始怀疑是否应该改变框架,因为在我看来,这种糟糕的字体呈现是不可接受的。

关于这个问题还有另外一个问题,但尚未得到解答:为什么JavaFX在使用文本组件时要在字母之间添加额外的间距,以及如何修复它?

我已经能够在运行Manjaro的两台不同的Linux机器上以及在运行Debian的虚拟机上使用以下代码重现这个问题:

代码语言:javascript
复制
package de.localtoast.fonttest;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class FontTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        VBox root = new VBox();
        Label label1 = new Label("0000000000000000000000");
        Label label2 = new Label("OOOOOOOOOOOOOOOOOOOOOO");
        Label label3 = new Label("oooooooooooooooooooooo");

        root.getChildren().add(label1);
        root.getChildren().add(label2);
        root.getChildren().add(label3);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Font Test");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-07 21:24:39

珠宝海建议我把我的问题放在openjfx-dex邮件的清单上。那边的人可以解释发生了什么

不是的问题,而是我的Linux系统上的一个配置问题。JavaFX需要亚像素渲染来正确定位象形文字。我用的是Manjaro,它是Archlinux的衍生产品。在Archlinux中,亚像素渲染是默认禁用,它与微软的专利有关。

在我的例子中,这个问题可以通过从AUR安装freetype2-ultimate5包来解决,尽管wiki中提到的freetype2-cleartype包可能是更好的选择。但后者目前没有在我的系统上编译,因为另一个问题。

票数 4
EN

Stack Overflow用户

发布于 2019-01-17 14:44:13

添加-Dprism.lcdtext=false可能会有所帮助,至少在Linux上,它通过使用灰度来消除令人痛苦的非彩色亚像素反走样的尝试,这样做更干净。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49136131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档