生成像素样式真实类型字体的位图(Java.awt)
Posted
技术标签:
【中文标题】生成像素样式真实类型字体的位图(Java.awt)【英文标题】:Generating bitmap of a pixel style true type font (Java.awt) 【发布时间】:2021-09-06 07:35:03 【问题描述】:我有一些不同格式的老式等宽 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);
【问题讨论】:
【参考方案1】:我找到了解决办法:
“我想创建字符的最小尺寸位图。(以像素为单位的“原始”尺寸)。更准确地说,是字符的最小尺寸。”
“...也许有一种方法可以从 .ttf 中提取字符的原始像素比?”
提取原始像素高度的一种方法是网站:fontdrop.info。
拖动 .ttf 文件并选择“数据”面板。向下滚动到你看到:
这将是像素高度(最高字形)。 而当使用这个(16)作为字体大小参数时,给了我原来的大小。
【讨论】:
以上是关于生成像素样式真实类型字体的位图(Java.awt)的主要内容,如果未能解决你的问题,请参考以下文章