如何使用旧版 MS Sans Serif 字体

3
我正在开发一个程序,它可以在位图上绘制文本。我必须使用旧的MS Sans Serif 72字体,因为我需要一个大号像素化的字体
我在C:\Windows\Fonts文件夹中找到了这个字体,但是当我使用以下代码时:
Font myFont("MS Sans Serif", 72F, FontStyle.Regular, GraphicsUnit.Pixel)
myGraphics.DrawString(string1, font, solidBrush, New PointF(100, 10))

然后myFont被设置为Microsoft Sans Serif,而不是MS Sans Serif。为什么Windows会将其更改为TrueType字体,我如何使用.fon文件?

你能告诉我如何使用MS Sans Serif吗?

1个回答

3

.NET仅支持使用TrueType字体(*.ttf),以与GDI+兼容。

在.NET中使用点阵字体(*.fon)很困难,需要使用Interop访问GDI方法。 请参考pinvoke.net,了解如何使用TextOut进行操作的示例。

一个更简单的选择是尝试将文本呈现为位图,然后放大位图以创建像素化效果,例如:

int width = 80;
int height = 80;

using (Bitmap bitmap = new Bitmap(width, height))
{
    using (Graphics graphics = Graphics.FromImage(bitmap))
    {
        var font = new Font("MS Sans Serif", 16, FontStyle.Regular, GraphicsUnit.Point);
        graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit;
        graphics.DrawString("012345", font, Brushes.Black, 0, 0);
    }

    e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
    e.Graphics.DrawImage(bitmap, ClientRectangle, 0, 0, width, height, GraphicsUnit.Pixel);
}

更新:加入了@HansPassant评论中提出的改进。


该内容需要涉及IT技术方面。

1
添加graphics.TextRenderingHint以禁用抗锯齿。并将位图缩小,以便使用InterpolationMode.NearestNeighbor进行缩放。 - Hans Passant
谢谢!运行得非常好。 - szabvik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接