Sto parlando di glifi e documenti WPF e ho riscontrato un'eccezione di riferimento null nel framework .Net 4.WPF - Salvataggio del carattere su disco, quindi istanziazione di GlyphTypeface per l'eccezione di caratteri. Perché?
Estrarre e salvare tipi di carattere true-type su disco come file .ttf, quindi provare a creare glifi in base ai caratteri. La prima volta che salvi un font su disco e istanzio un GlyphTypeface basato sul font dopo creando un GlyphTypeface da un altro font nella stessa cartella ottengo un'eccezione di riferimento null.
Dire che ho i caratteri A e B. B non è stato salvato su disco (A maggio o non può essere stato salvato su disco, che non sembra avere importanza):
1) salvare su disco B nella stessa cartella di A,
2) creare GlyphTypeface utilizzando il carattere A,
3) creare GlyphTypeface utilizzando il carattere B = eccezione.
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)
Se riavvio l'app ed eseguo di nuovo (con il carattere B già presente sul disco), il passaggio 3 non genera un'eccezione.
Il codice per salvare un tipo di carattere su disco è semplicemente scrivendo una sezione da un flusso binario e lasciarsi andare del file:
if (!File.Exists(filename))
{
using (FileStream fs = File.Create(filename, length))
{
fs.Write(m_data, m_index, length);
fs.Close();
}
}
Tutte le idee? Non voglio dover mettere ogni carattere nella sua cartella ...
Grazie per il vostro tempo.
La soluzione alternativa font-per-folder non funziona per me, hai mai trovato ulteriori informazioni su questo problema? – Cheetah
No, mi dispiace. La soluzione alternativa funziona ancora per me. Sto usando .Net 4.0 (e penso che non sia stato un problema in .Net 3.5 SP1, ma non sono positivo). Controllo se un font esiste in una cartella prima di crearlo anch'io; Sospetto che se crei un font nella propria cartella e poi provi a eliminarlo/sovrascriverlo (senza riavviare la tua app) genererà un'eccezione. – AndrewS