addFontFile de los recursos

He agregado una fuente personalizada usando el siguiente código:

PrivateFontCollection pfc = new PrivateFontCollection(); pfc.AddFontFile("C:\\Path To\\YourFont.ttf"); label1.Font = new System.Drawing.Font(pfc.Families[0], 16, FontStyle.Regular); 

Agregué el archivo de fuente en recursos. ¿Cómo agrego addFontFile de los recursos?

Si incluyó su fuente en los recursos

Prueba esta función

 private void addfontfrommemory() { Stream fontStream = this.GetType().Assembly.GetManifestResourceStream("yourfont.ttf"); byte[] fontdata = new byte[fontStream.Length]; fontStream.Read(fontdata,0,(int)fontStream.Length); fontStream.Close(); unsafe { fixed(byte * pFontData = fontdata) { pfc.AddMemoryFont((System.IntPtr)pFontData,fontdata.Length); } } } 

Editado

Cómo cargar el recurso del ensamblado: (YourNamespace.file.ttf)

 Stream fontStream = Assembly.GetExecutingAssembly() .GetManifestResourceStream("WindowsFormsApplication1.SBADR.TTF"); 

Mi explorador de soluciones:

enter image description here

 private static void AddFontFromResource(PrivateFontCollection privateFontCollection, string fontResourceName) { var fontBytes = GetFontResourceBytes(typeof (App).Assembly, fontResourceName); var fontData = Marshal.AllocCoTaskMem(fontBytes.Length); Marshal.Copy(fontBytes, 0, fontData, fontBytes.Length); privateFontCollection.AddMemoryFont(fontData, fontBytes.Length); // Marshal.FreeCoTaskMem(fontData); Nasty bug alert, read the comment } private static byte[] GetFontResourceBytes(Assembly assembly, string fontResourceName) { var resourceStream = assembly.GetManifestResourceStream(fontResourceName); if (resourceStream == null) throw new Exception(string.Format("Unable to find font '{0}' in embedded resources.", fontResourceName)); var fontBytes = new byte[resourceStream.Length]; resourceStream.Read(fontBytes, 0, (int)resourceStream.Length); resourceStream.Close(); return fontBytes; } 

Esta es la forma en que lo hago.

Primero obtenga su archivo Font.ttf y use Visual Studio, arrastre y suelte el archivo en la carpeta raíz o en la carpeta de recursos.

En el Explorador de soluciones, haga clic con el botón derecho en el archivo y haga clic en Propiedades. Seleccione Build Action = Content . Esto mostrará el archivo en los archivos de la aplicación en Propiedades del proyecto> Publicar> Archivos de la aplicación. Verás que ahora se puede seleccionar el archivo (por defecto está incluido automáticamente).

ClickOnce ahora copiará el archivo al StartupPath

Para usarlo, sigue esta muestra:

 PrivateFontCollection pfc = new PrivateFontCollection(); pfc.AddFontFile(Path.Combine(Application.StartupPath, "font_name.ttf")); textBox1.Font = new Font(pfc.Families[0], 18, FontStyle.Regular); 

Esto cargará una fuente en una colección de fonts privada y evitará cualquier referencia a objetos y errores de tiempo de ejecución de la memoria que pueda ver usando los ejemplos anteriores.

Por motivos de rendimiento, solo queríamos cargar la fuente una vez y mantener referencias a la fuente para múltiples operaciones de dibujo entre llamadas. El truco consiste en garantizar que PrivateFontCollection no salga del scope si mantiene una referencia al objeto Font que ha creado.

Agregue algunas variables estáticas (compartidas)

 Private Shared _sharedFont As Font Private Shared _sharedFontCollection As Text.PrivateFontCollection Private Shared _sharedFontSize As Integer 

Luego declara estas funciones

 Private Function LoadSharedFont(ByVal fontName As String, ByVal size As Integer, ByVal style As FontStyle) As Font 'Check if font name or size has changed, then clear cache If size <> _sharedFontSize Then _sharedFont = Nothing If _sharedFont Is Nothing Then 'Make this shared so this variable doesnt go out of scope and is garbage collected _sharedFontCollection = New Text.PrivateFontCollection() _sharedFont = LoadFont(fontName, size, style) _sharedFontSize = size End If Return _sharedFont End Function 

y

 Private Function LoadFont(ByVal fontName As String, ByVal size As Integer, ByVal style As FontStyle) As Font Dim executingAssembly As System.Reflection.Assembly = Reflection.Assembly.GetCallingAssembly() Dim myNamespace As String = executingAssembly.GetName().Name.ToString() Try Using fontstream = executingAssembly.GetManifestResourceStream(myNamespace + "." + fontName) Dim fontBytes(CInt(fontstream.Length)) As Byte fontstream.Read(fontBytes, 0, CInt(fontstream.Length)) Dim fontData As System.IntPtr = Marshal.AllocCoTaskMem(fontBytes.Length) Marshal.Copy(fontBytes, 0, fontData, fontBytes.Length) _sharedFontCollection.AddMemoryFont(fontData, fontBytes.Length) Marshal.FreeCoTaskMem(fontData) End Using Return New Font(_sharedFontCollection.Families(0), size, style) Catch ex As Exception 'An unexpected error has occurred so return a default Font just in case. Return New Drawing.Font("Arial", size, FontStyle.Regular) End Try End Function 

Use de la siguiente manera:

 Dim font = LoadSharedFont("OpenSans-CondBold.ttf", 12, FontStyle.Bold)