我一直试图开发一个小应用程序作为学习经验,但我一直无法找到这个问题的问题。我一直试图加载一个字体(Roboto Medium)写入内存,以便计算机正确显示文本。但由于某些原因,这段代码似乎没有做到这一点。我在资源管理器中的所有文本都选择了roboto-medium
TrueType字体,我已经确保字体是嵌入的,并且在执行InitializeComponent()
方法之前调用了LoadFont()
方法。为什么会发生这种情况?
namespace exampleNamespace
{
// Class used for main design system
public partial class Design
{
// Private font collection variable for roboto medium font
public PrivateFontCollection pfc = new PrivateFontCollection();
// Loads font into memory from Form.cs
public void LoadFont()
{
int fontLength = Properties.Resources.roboto_medium.Length;
byte[] fontdata = Properties.Resources.roboto_medium;
IntPtr data = Marshal.AllocCoTaskMem(fontLength);
Marshal.Copy(fontdata, 0, data, fontLength);
pfc.AddMemoryFont(data, fontLength);
}
}
2条答案
按热度按时间zte4gxcn1#
也许您需要使用
Application.SetCompatibleTextRenderingDefault
设置true
。文档中说对于内存字体,
若要使用内存字体,必须使用GDI+呈现控件上的文本。使用SetCompatibleTextRenderingDefault方法并传递true,可在应用程序上设置GDI+呈现
https://learn.microsoft.com/en-us/dotnet/api/system.drawing.text.privatefontcollection.addmemoryfont?view=windowsdesktop-5.0#System_Drawing_Text_PrivateFontCollection_AddMemoryFont_System_IntPtr_System_Int32_
下面的链接说明了如何在主函数中进行设置。默认为
false
,请将其更改为true
。https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.application.setcompatibletextrenderingdefault?view=windowsdesktop-5.0
fnatzsnv2#
在Visual C# 2005或更新版本中,会在Program.cs档案中自动产生
SetCompatibleTextRenderingDefault
的呼叫。若要变更文字转译预设值,请将产生的程式码修改为true
。UseCompatibleTextRendering属性用于在使用TextRenderer类呈现文本的Windows窗体控件与使用Graphics类执行自定义文本呈现的.NET Framework 1.0和.NET Framework 1.1应用程序之间提供视觉兼容性。在大多数情况下,如果应用程序不是从.NET Framework 1.0或.NET Framework 1.1升级的,建议您将UseCompatibleTextRendering设置为默认值false。