Я слоняюсь без дела с глифами WPF и документами и столкнулся с исключением нулевой ссылки в платформе.Net 4.
Я извлекаю и сохраняю истинные печатные шрифты на диск как .ttf файлы, затем пытаюсь создать Глифы на основе шрифтов. В первый раз, когда я сохраняю шрифт на диск и инстанцирую GlyphTypeface на основе шрифта после создания GlyphTypeface от другого шрифта в той же папке, я получаю исключение нулевой ссылки.
Скажите, что у меня есть шрифты A и B. B не был сохранен на диск (Май, или мог не быть сохранен на диск; это, кажется, не имеет значения):
1) сохраните B на диск в той же папке как A,
2) создайте GlyphTypeface с помощью шрифта A,
3) создайте GlyphTypeface с помощью шрифта B = исключение.
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)
Если я перезапускаю свое приложение и выполняю его снова (со шрифтом B уже на диске), шаг 3 не выдает исключение.
Код для сохранения шрифта на диск просто пишет раздел из двоичного потока и отпускает файла:
if (!File.Exists(filename))
{
using (FileStream fs = File.Create(filename, length))
{
fs.Write(m_data, m_index, length);
fs.Close();
}
}
Какие-либо идеи? Я не хочу должным быть помещать каждый шрифт в его собственную папку...
Спасибо за внимание.
В итоге я использовал обходной путь сохранения каждого шрифта в отдельную папку (используя имя шрифта для имени папки). Исключение исчезло, поэтому я думаю, что мы можем списать это на ошибку в .Net.