嗯,我基本上想从字面上嵌入我将在 WPF 应用程序中使用的字体集合。它们存储在我自己的虚拟文件系统(如 WinRAR)中,我只想通过字节数组或内存流加载它们。但是,我还没有找到任何可行的解决方案。我尝试过 PrivateFontCollection,但最后,我意识到 Families 属性适用于 WinForms(System.Drawing.FontFamily 和NOT系统.Windows.Media.FontFamily)。我还将它们分类为操作系统级别的提取是不可能的。
所以问题仍然存在:
如何使用字节数组或内存流加载 System.Windows.Media.FontFamily?
EDIT:
这是一个 .ttf 文件(True Type 字体)
您已发布此解决方案:
如果有人正在寻找这种解决方案,就在这里:
public static void Load(MemoryStream stream)
{
byte[] streamData = new byte[stream.Length];
stream.Read(streamData, 0, streamData.Length);
IntPtr data = Marshal.AllocCoTaskMem(streamData.Length); // Very important.
Marshal.Copy(streamData, 0, data, streamData.Length);
PrivateFontCollection pfc = new PrivateFontCollection();
pfc.AddMemoryFont(data, streamData.Length);
MemoryFonts.Add(pfc); // Your own collection of fonts here.
Marshal.FreeCoTaskMem(data); // Very important.
}
public static System.Windows.Media.FontFamily LoadFont(int fontId)
{
if (!Exists(fontId))
{
return null;
}
/*
NOTE:
This is basically how you convert a System.Drawing.FontFamily to System.Windows.Media.FontFamily, using PrivateFontCollection.
*/
return new System.Windows.Media.FontFamily(MemoryFonts[fontId].Families[0].Name);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)