WPF - Сохранение на диск шрифта, затем инстанцирование GlyphTypeface для шрифта выдают исключение. Почему?

Я слоняюсь без дела с глифами 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();
    }
}

Какие-либо идеи? Я не хочу должным быть помещать каждый шрифт в его собственную папку...

Спасибо за внимание.

5
задан akjoshi 17 July 2012 в 11:10
поделиться

1 ответ

В итоге я использовал обходной путь сохранения каждого шрифта в отдельную папку (используя имя шрифта для имени папки). Исключение исчезло, поэтому я думаю, что мы можем списать это на ошибку в .Net.

2
ответ дан 14 December 2019 в 13:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: