我正在开发一个在位图上绘制文本的程序。我必须使用旧的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 吗?
答案 0 :(得分: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的评论中添加了改进。