1

我正在用java编写一个gui PC程序,我正在使用Java Swing,问题是,对于给定的字体,具有给定的大小和样式,在给定的字符串上,我在某些机器上计算边界框(以像素为单位),是否有可能在其他机器上,对于完全相同的字体和完全相同的字符串,计算出的边界框会变得不同?

如果有可能(根据我在程序上得到的结果似乎是这种情况),那么我如何定义一个字体,对于给定的字符串,在每台可能的机器上,它将返回完全相同的边界框?

4

2 回答 2

2

你不能,因为渲染取决于几个因素:

  1. 字体本身:某些计算机可能没有您要求的字体,或者字体可能具有相同的名称,但其内容不同。您可以通过在可部署包中嵌入自定义字体来避免这种情况。
  2. 屏幕分辨率:字体根据 DPI 中的屏幕分辨率进行渲染。在更高密度的屏幕上,字体会更大(以像素为单位),否则它们将无法阅读。例如,与分辨率为 72dpi 的普通屏幕相比,Apple 的视网膜显示器的分辨率接近 400dpi。一个 72px 高的字符串在普通屏幕上占 1 英寸,完全可读,而仅占 0.18 英寸,几乎不可读。
  3. 用户有权自定义其字体的大小。如果我是老花眼,我会想要更大的字体。

编辑

或者,您可以通过使用预渲染字符串(保存为光栅图形甚至 SVG 路径)来欺骗系统,但请注意我向您提出的问题。

于 2013-08-25T08:42:04.733 回答
1

这是交叉点,设置:

  1. 本机操作系统,

    • 可访问的安装字体(Native OS 使用不同的字体、大小、粗体......)

    • 本机操作系统中的主题

    • 用于主题的字体(其属性)

    • 各种用户设置,海关主题

    • 可以更改本机操作系统中的全局属性的白痴自定义应用程序,而不是应用程序设置

  2. 观感

    • L&F使用自己的Font,不一样

    • 默认情况下与 Native OS 相同的选项

    • i**** 可以更改本机操作系统中的全局属性的自定义应用程序.....

  3. 非常不同且太难的工作是根据屏幕比例(以像素为单位)更改字体,

  4. 任何更改都将在 UIManager 中进行迭代并更改 FontUIResources 的每个键

于 2013-08-25T08:44:24.940 回答