¿Cómo se usa la fuente de recursos directamente sin guardar la fuente en el sistema de archivos local para la aplicación independiente [aplicación de escritorio] en VB.net/C#?Utilice la fuente de recursos directamente en VB.net/C#
Respuesta
eso es posible, necesitará utilizar el método PrivateFontCollection.AddMemoryFont(). Por ejemplo, he añadido un archivo de fuentes llamado "test.ttf" como un recurso y lo utilizó como esto:
using System.Drawing.Text;
using System.Runtime.InteropServices;
...
public partial class Form1 : Form {
private static PrivateFontCollection myFonts;
private static IntPtr fontBuffer;
public Form1() {
InitializeComponent();
if (myFonts == null) {
myFonts = new PrivateFontCollection();
byte[] font = Properties.Resources.test;
fontBuffer = Marshal.AllocCoTaskMem(font.Length);
Marshal.Copy(font, 0, fontBuffer, font.Length);
myFonts.AddMemoryFont(fontBuffer, font.Length);
}
}
protected override void OnPaint(PaintEventArgs e) {
FontFamily fam = myFonts.Families[0];
using (Font fnt = new Font(fam, 16)) {
TextRenderer.DrawText(e.Graphics, "Private font", fnt, Point.Empty, Color.Black);
//e.Graphics.DrawString("Private font", fnt, Brushes.Black, 0, 0);
}
}
}
tenga en cuenta que la variable estática fontBuffer
es intencionadamente. La administración de la memoria es difícil cuando se usa AddMemoryFont(), la memoria debe permanecer válida siempre que la fuente se pueda utilizar y PrivateFontCollection aún no se elimine. Asegúrese de no llamar a Marshal.FreeCoTaskMem() si no tiene esa garantía, se trata de un muy error común que causa un daño de texto muy difícil de diagnosticar. Solo tienes una AccessViolationException cuando tienes suerte. Mantenerlo válido durante la vida del programa es la solución simple.
Excelente. Gracias por publicar. – Harsha
@HansPassant: ¿y si el archivo de fuente que quiero agregar tiene la extensión '.bin' en lugar de '.ttf' –
Necesitaba usar PInvoke antes de que las cosas funcionaran. La función ['AddFontMemResourceEx'] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd183325 (v = vs.85) .aspx) tuvo que ser utilizada ... quizás porque' PrivateFontCollection .AddMemoryFont() 'espera que la fuente esté en la memoria del sistema. También me pregunto si esto tiene algo que ver con el hecho de que estaba cambiando la fuente de un cuadro de texto, en lugar de hacerlo de forma explícita con la fuente. (Sin embargo, el uso de 'PrivateFontCollection.AddFontFile()' todavía funcionaba sin la función PInvoke). –
¿Está hablando de fuentes de embalaje con la aplicación. en caso afirmativo. la salida siguiente: http://msdn.microsoft.com/en-us/library/ms753303.aspx
- 1. Utilice XDocument como fuente para XmlSerializer.Deserialize?
- 2. cómo hacer que maven utilice los recursos de prueba
- 3. ¿Es posible hacer la sustitución de cadenas en archivos XML de recursos de Android directamente?
- 4. Utilice la linterna de la cámara en Android
- 5. Utilice la solicitud POST en JSfiddle
- 6. Recursos que explican el código fuente de Linux
- 7. En Java, ¿en qué parte de la jerarquía del paquete/fuente se deben ubicar los recursos?
- 8. Inconsistencia al establecer el tamaño de la fuente TextView en el código y en los recursos
- 9. Creación de un cliente de servicio web directamente desde la fuente
- 10. No utilice un tema precompilado
- 11. ejecutar código fuente de Java en el servidor externo - la seguridad y los recursos límite?
- 12. ¿Existe algún código fuente de ejemplo de prueba de automatización que utilice .NET
- 13. Utilice MaxBackupIndex en DailyRollingFileAppender -log4j
- 14. Utilice Mongo Engine y PyMongo juntos
- 15. Utilice IValueConverter con DynamicResource?
- 16. Utilice neo4j con R
- 17. Render DateTime.Now directamente en la página ASPX
- 18. Utilice C++ con JNI
- 19. Comportamiento FirstOrDefault directamente en la instrucción LINQ
- 20. En WPF, ¿cómo hago referencia a una fuente en una biblioteca de recursos en el código?
- 21. Configuración de la propiedad de la propiedad directamente en C#
- 22. afiliarse directamente en JPQL
- 23. Recursos de filtrado en SBT
- 24. Cambiar la fuente en el cuadro de diálogo CHOOSECOLOR
- 25. Vim: utilice condicionalmente la función fugitive # statusline en vimrc
- 26. Mover recursos en WEB-INF
- 27. TSQL - Utilice un derivado Seleccionar columna en la cláusula WHERE
- 28. Utilice dos UIViewAnimationCurves diferentes en la misma animación
- 29. ¿Dónde debería colocar el archivo de fuente en los recursos de Android?
- 30. Utilice Microsoft Solver Foundation en C#
@SamSol: no existe tal cosa como CS.NET. ¿Dónde escuchaste eso? El lenguaje es solo "C#". –