Includere font in applicazioni C#

luca 04/10/2013 0

Sto sviluppando una applicazione che utilizzerà dei caratteri (fonts) particolari; è possibile evitare di installare tali caratteri nel PC dell’utente includendoli all’interno dell’applicazione e caricandoli in memoria a runtime: questo tutorial spiega come fare…

Font

Inseriamo il file del font all’interno della cartella del progetto:

Nell’esempio ho scelto il font Always Forever di Brittney Murphy.

Aggiungiamo il file al nostro progetto selezionando Add – Existing Item… e selezionando il nostro font:

Configuriamo come Build Action Embedded Resource:

Codice

Per prima cosa configuriamo il progetto abilitando il codice unsafe:

Creiamo una istanza dell’oggetto PrivateFontCollection che conterrà il font una volta caricato in memoria:

private PrivateFontCollection pfc = new PrivateFontCollection();

Leggiamo il contenuto del file e memorizziamolo nel byte array fontdata:

Stream fontStream = this.GetType().Assembly.GetManifestResourceStream("EmbeddingFontDemo.always_forever.ttf");
byte[] fontdata = new byte[fontStream.Length];
fontStream.Read(fontdata, 0, (int)fontStream.Length);
fontStream.Close();

Infine aggiungiamo il font all’oggetto PrivateFontCollection; dovendo usare i puntatori dobbiamo includere la chiamata in un blocco unsafe:

unsafe
  {
    fixed (byte* pFontData = fontdata)
    {
      pfc.AddMemoryFont((System.IntPtr)pFontData, fontdata.Length);
    }
  }

Per poter utilizzare il font all’interno di un controllo, è necessario impostare a true la proprietà del controllo UseCompatibleTextRendering:

E’ ora possibile applicare il nuovo font al controllo:

label1.Font = new Font(pfc.Families[0], 30, FontStyle.Regular);

Demo

Ho preparato un progetto che dimostra quando spiegato sopra, disponibile nel mio repository GitHub.

Leave A Response »

Questo sito usa i cookie per poterti offrire una migliore esperienza di navigazione maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi