本文主要是介绍linux 字体间距,JavaFX字体渲染中的字符间距(字距调整)错误(在Linux中),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我已经开始在JavaFX中开发一个应用程序而且我遇到了一个问题,我发现很少有用的信息:Linux中字符之间的间距非常不均匀.我不是在谈论不同角色的宽度,而是在谈论角色之间的空间.
它在普通文本中可见,但以下示例比普通文本更好地说明了效果.看看第一行.前两个字符之间的空间小于第二个和第三个字符之间的空格.这也发生在第六和第七个角色之间以及其他几个角色:
Swing没有这个问题,JavaFX在Windows中没有这个问题,或者在该操作系统上几乎看不到.它似乎也不是Mac上的主要问题.为了比较,这里是Mac Retina MacBook Pro的一个示例输出,2014年中,运行OS X 10.12.6和Java 9.0.4:
有谁知道这是否是JavaFX字体渲染引擎中的错误?如果是这样,有解决方法吗?
我真的开始怀疑我是否应该更改框架,因为在我看来这样糟糕的字体渲染是不可接受的.
我已经能够在运行Manjaro的两台不同Linux机器上以及运行Debian的虚拟机中使用以下代码重现此问题:
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);
}
}
解决方法:
这不是JavaFX的问题,而是Linux系统上的配置问题. JavaFX需要子像素渲染才能正确定位字形.我正在使用Manjaro,它是Archlinux的衍生物.在Archlinux中,子像素渲染是disabled by default,这与Microsoft所涵盖的专利有关.
在我的情况下,问题可以通过从AUR安装freetype2-ultimate5软件包来解决,虽然在wiki中提到的freetype2-cleartype软件包可能是更好的选择.但由于另一个问题,后者目前无法在我的系统上编译.
标签:java,javafx,kerning,subpixel,font-rendering
来源: https://codeday.me/bug/20190522/1153141.html
这篇关于linux 字体间距,JavaFX字体渲染中的字符间距(字距调整)错误(在Linux中)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!