首页 > 解决方案 > BufferedImage drawString 损坏的字母

问题描述

我正在用 Kotlin 编写一个在 Raspberry Pi 上运行的程序。我正在使用小型 128x64 像素 OLED 显示屏

要显示文本,我在 BufferedImage 上绘制它,然后显示该图像

 val bufferedImage = BufferedImage(128, 64, BufferedImage.TYPE_INT_RGB)
 val g = bufferedImage.createGraphics()
 g.paint = Color.WHITE
 g.font = Font("PixelMix", Font.BOLD, /*Font size*/8)
 g.drawString("IP: 192.168.1.12", 0, 24)
 g.dispose()

 display.drawImage(bufferedImage, 0, 0)

字体链接:https ://www.dafont.com/pixelmix.font

因为屏幕空间非常有限,我使用小字体。

但是问题来了——下面的代码生成的图像中第一个1缺少垂直线,而最后一个1是正方形。

当我这样做g.font = Font("PixelMix", Font.PLAIN, 10)2192缺少最右边的像素行,与字体大小 12 类似。在字体大小 16P上缺少垂直线,依此类推。当一切看起来都可以接受时,它只是字体大小为 24,但对于那个大小的屏幕来说,24 太大了。

我现在的问题是如何在 BufferedImage 上绘制一个字符串,这样我就不会得到这样的工件?

编辑:

字体大小为 10 时,正好 8 个像素(垂直)用于显示字符至于字体大小 8,它是垂直 6 个像素,而对于 16,它是 12 个像素

我做了g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF),但没有帮助

标签: kotlinbufferedimage

解决方案


推荐阅读