生成像素样式真实字体的位图 (Java.awt)

Generating bitmap of a pixel style true type font (Java.awt)

我有一些各种格式的老式等宽 Amiga / Atari 字体。其中有ttf.

我想创建尽可能小的字符位图。 (以像素为单位的“原始”大小)。更准确地说,字符的最小可能大小。

所以从那里放大它(我正在渲染的角色的四边形)应该保持角色像素比并保持清晰。

我可以将像素重新绘制为 png 并自己手动映射它们。这不会是最糟糕的。 但是应该有更好的方法。我觉得 .ttf 格式并不是真正适用于小型像素化字体。我不太熟悉其他格式。

也许有办法从 .ttf 中提取字符的原始像素比?

我包含了一些用于附加上下文的代码。只是为了展示我的工作和我现在使用的类。

正在创建 awt.Font。我希望“fontSize”的位置如上所述:

InputStream stream = new FileInputStream(filePath);
Font font = Font.createFont(TRUETYPE_FONT,stream).deriveFont(PLAIN,fontSize);

从这里我创建一个临时的 BufferedImage,设置一个 Graphics2D 上下文,设置上下文的字体并派生 FontMetrics。

BufferedImage image = new BufferedImage(1,1,BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics2D = image.createGraphics();
graphics2D.setFont(font);
FontMetrics metrics = graphics2D.getFontMetrics();

我使用 tmp 图像循环遍历字形以确定最终缓冲图像的宽度和高度 + 最终图像中字符的位置信息。 (代码未显示)

然后创建最终图像:

image = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
graphics2D = image.createGraphics();
graphics2D.setFont(font);
graphics2D.setColor(Color.WHITE);

        for (char i = 0; i < font.getNumGlyphs(); i++) {
            if (font.canDisplay(i)) {
                Glyph glyph = characterMap.get(i);
                glyph.calculateTextureCoordinates(width,height);
                graphics2D.drawString(Character.toString(i), glyph.x,glyph.y);
            }
        }

我找到了解决方案:

"I want to create the smallest possible size bitmap of the characters. (The "original" size in pixels). More accurately, the characters' smallest possible size."

"...maybe there is a way to extract the original pixel ratio of the characters from a .ttf?"

提取原始像素高度的一种方法是网站:fontdrop.info

将 .ttf 文件拖到 select“数据”面板上。向下滚动到您会看到:

那将是(最高字形的)像素高度。 而当使用这个(16)作为font-size参数时,给了我原来的大小。