java graphics2d 字体_自Java 7u13以来,字体字形无法使用Graphics2D drawString呈现

Windows 10上使用

Java 32bit中的某些特定真实字体字体绘制字符串时,我遇到了一个奇怪的问题.

从Java 7u13开始,每当字体的字符/字形宽度超过其高度的4倍时,它就不会使用Graphics2D.drawString进行渲染(例如,字形4001em宽,基本字体大小为1000em):

public void paint(Graphics g) {

Graphics2D g2 = (Graphics2D)g;

g2.setFont(new Font("myFontWithWideGlyphForX", Font.PLAIN, 12));

g2.drawString("XXXX", 10, 10);

}

但是,字体在JLabel上正确呈现,因此在对底层Swing代码进行一些调查之后,我意识到将渲染提示KEY_TEXT_ANTIALIASING设置为VALUE_TEXT_ANTIALIAS_LCD_HRGB会使文本正确呈现:

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或更早版本,文本呈现没有任何问题,并且没有设置VALUE_TEXT_ANTIALIAS_LCD_HRGB.

对于具有如此宽字形的任何其他字体也会发生相同的情况 – 例如,此随机字体具有字符“J”的宽字形:

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

设置子像素抗锯齿VALUE_TEXT_ANTIALIAS_LCD_HRGB只是为了呈现字体看起来很丑陋,并不总是可行(例如,在使用第三方库时).有没有人知道自7u13以来awt没有渲染这些角色的原因是什么?这样的字体是否不受支持?或者这可能是一个错误?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这些代码是针对 Vivado 工具对 FPGA 设计进行约束(constraints)的语句,用于指定 FPGA 设备的引脚映射、时钟、电平标准等信息,以保证设计在硬件上能够正确工作。 具体来说,这些语句的含义如下: 1. `set_property -dict { PACKAGE_PIN H16 IOSTANDARD LVCMOS33 } [get_ports { clk }];` - `set_property` 是 Vivado 工具中的约束命令,用于设置约束属性。 - `-dict { PACKAGE_PIN H16 IOSTANDARD LVCMOS33 }` 表示设置一个字典类型的属性,其中 `PACKAGE_PIN` 表示引脚的物理位置,`H16` 是该引脚的位置,`IOSTANDARD` 表示引脚的电平标准,`LVCMOS33` 表示使用 LVCMOS33 标准。 - `[get_ports { clk }]` 表示获取名为 `clk` 的端口对象,将 `PACKAGE_PIN` 和 `IOSTANDARD` 属性设置为上面指定的值。 2. `create_clock -add -name sys_clk_pin -period 8.00 -waveform {0 4} [get_ports { clk }];` - `create_clock` 命令用于创建时钟对象。 - `-add` 表示将新的时钟添加到已有的时钟列表中。 - `-name sys_clk_pin` 表示设置时钟的名称为 `sys_clk_pin`。 - `-period 8.00` 表示时钟周期为 8ns。 - `-waveform {0 4}` 表示时钟波形为持续 0ns,然后持续 4ns。 - `[get_ports { clk }]` 表示获取名为 `clk` 的时钟端口对象,将其设置为新建时钟的源。 3. `set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[7]}]`、`set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[6]}]`、`set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[5]}]`、`set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[4]}]`、`set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[3]}]`、`set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[2]}]`、`set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[1]}]`、`set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[0]}]` - 这些语句用于设置名为 `ad_data[7]`、`ad_data[6]`、`ad_data[5]`、`ad_data[4]`、`ad_data[3]`、`ad_data[2]`、`ad_data[1]`、`ad_data[0]` 的端口使用 LVCMOS33 电平标准。 4. `set_property PACKAGE_PIN T14 [get_ports {ad_data[7]}]`、`set_property PACKAGE_PIN U12 [get_ports {ad_data[6]}]`、`set_property PACKAGE_PIN U13 [get_ports {ad_data[5]}]`、`set_property PACKAGE_PIN V13 [get_ports {ad_data[4]}]`、`set_property PACKAGE_PIN V15 [get_ports {ad_data[3]}]`、`set_property PACKAGE_PIN T15 [get_ports {ad_data[2]}]`、`set_property PACKAGE_PIN R16 [get_ports {ad_data[1]}]`、`set_property PACKAGE_PIN U17 [get_ports {ad_data[0]}]` - 这些语句用于将 `ad_data[7]`、`ad_data[6]`、`ad_data[5]`、`ad_data[4]`、`ad_data[3]`、`ad_data[2]`、`ad_data[1]`、`ad_data[0]` 端口映射到具体的 FPGA 引脚上,分别为 `T14`、`U12`、`U13`、`V13`、`V15`、`T15`、`R16` 和 `U17`。 5. `set_property IOSTANDARD LVCMOS33 [get_ports {ad_clk}]`、`set_property PACKAGE_PIN V17 [get_ports {ad_clk}]` - 这些语句用于设置名为 `ad_clk` 的端口使用 LVCMOS33 电平标准,并将其映射到引脚 `V17` 上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值