我正在讨论WPF字形和文档,并在.Net 4框架中遇到了一个空引用异常.
我将真实字体作为.ttf文件提取并保存到磁盘,然后尝试根据字体创建字形.我第一次将字体保存到磁盘并在从同一文件夹中的另一种字体创建GlyphTypeface 后基于字体实例化GlyphTypeface 我得到一个空引用异常.
假设我有字体A和B. B尚未保存到磁盘(A可能已经或可能没有保存到磁盘;这似乎并不重要):
1)将B保存到与A相同的文件夹中的磁盘,
2)使用字体A
创建GlyphTypeface ,3)使用字体B =异常创建GlyphTypeface.
Null reference exception at:
at MS.Internal.FontCache.FontFaceLayoutInfo.IntMap.TryGetValue(Int32 key, UInt16& value)
at MS.Internal.FontCache.FontFaceLayoutInfo..ctor(Font font)
at System.Windows.Media.GlyphTypeface.Initialize(Uri typefaceSource, StyleSimulations styleSimulations)
at System.Windows.Media.GlyphTypeface..ctor(Uri typefaceSource)
Run Code Online (Sandbox Code Playgroud)
如果我重新启动我的应用程序并再次运行它(字体B已经在磁盘上),步骤3不会抛出异常.
将字体保存到磁盘的代码只是从二进制流中编写一个部分并放开文件:
if (!File.Exists(filename))
{
using (FileStream fs = File.Create(filename, length))
{
fs.Write(m_data, m_index, length);
fs.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我不想将每个字体都放在自己的文件夹中......
谢谢你的时间.