Wie Ressourcen Schriftart direkt zu verwenden, ohne Schrift in lokalen Dateisystem für eigenständige Anwendung [Desktop-Anwendung] in VB.net/C# speichern?Verwenden Sie Ressource Schriftart direkt in VB.net/C#
Antwort
Das ist möglich, müssen Sie die PrivateFontCollection.AddMemoryFont() -Methode verwenden. Zum Beispiel habe ich eine Schriftdatei mit dem Namen „test.ttf“ als Ressource und verwendet es wie folgt aus:
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);
}
}
}
Sie beachten, dass die fontBuffer
Variable statische absichtlich. Die Speicherverwaltung ist schwierig, wenn Sie AddMemoryFont() verwenden. Der Speicher muss so lange gültig sein, wie die Schriftart verwendet werden kann und die PrivateFontCollection noch nicht entfernt wurde. Achten Sie darauf, Marshal.FreeCoTaskMem() nicht aufzurufen, wenn Sie diese Garantie nicht haben, ist es ein sehr häufiger Fehler, der sehr schwer zu diagnostizieren Textbeschädigung verursacht. Sie erhalten nur eine AccessViolationException, wenn Sie Glück haben. Für die Lebensdauer des Programms gültig zu halten, ist die einfache Lösung.
Hervorragend. Danke fürs Schreiben. – Harsha
@HansPassant: Was ist, wenn die Font-Datei, die ich hinzufügen möchte, die Erweiterung '.bin' anstelle von '.ttf' hat –
Ich musste PInvoke verwenden, bevor die Dinge funktionierten. Die Funktion ['AddFontMemResourceEx'] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd183325 (v = vs.85) .aspx) musste verwendet werden ... vielleicht weil' PrivateFontCollection .AddMemoryFont() 'erwartet, dass sich die Schriftart im Systemspeicher befindet. Ich frage mich auch, ob dies etwas mit der Tatsache zu tun hat, dass ich die Schriftart einer Textbox änderte, anstatt explizit mit der Schriftart zu rendern. (Die Verwendung von 'PrivateFontCollection.AddFontFile()' funktionierte jedoch immer noch ohne die PInvoke-Funktion). –
Sprechen Sie über Packaging Fonts mit Anwendung. Falls ja. Check out this: http://msdn.microsoft.com/en-us/library/ms753303.aspx
- 1. Verwenden Sie mitCredential mit $ Ressource
- 2. Wie verwenden Sie Datenanmerkungen direkt in Modellen
- 3. So verwenden Sie benutzerdefinierte Schriftart mit WebView
- 4. MooTools: So verwenden Sie responseText direkt
- 5. Benutzerdefinierte Schriftart verwenden
- 6. Verwenden Sie eine externe Datei oder Ressource?
- 7. Verwenden Sie die System-Monospace-Schriftart in GTK-Textansicht
- 8. So verwenden Sie DOS-Schriftart in WinForms-Anwendung
- 9. So verwenden Sie eine benutzerdefinierte Schriftart in Xamarin Cross Platform
- 10. So verwenden Sie eine benutzerdefinierte Schriftart in einer RShiny App
- 11. benutzerdefinierte Schriftart verwenden Android Xamarin
- 12. Externe Schriftart laden und in C verwenden #
- 13. Verwenden Sie off() direkt in on() Callback Firebase?
- 14. Wie UI Schriftart Symbole in einer eckigen App verwenden
- 15. Wie eine benutzerdefinierte Schriftart in iOS Tab-Leiste verwenden
- 16. Wie definieren und verwenden Sie eine einfache Ressource in XAML?
- 17. Verwenden Sie AngularJS, um geschachtelte Ressource in Rails
- 18. Verwenden Sie ein Ressource-Wörterbuch als Thema in Silverlight
- 19. Kann nicht Schriftart in Android verwenden
- 20. Wie Roboto Schriftart in android verwenden Projekt
- 21. Verwenden benutzerdefinierter Schriftart in einem UIWebView
- 22. wie benutzerdefinierte Schriftart in Kartik mpdf verwenden?
- 23. Golang JSON in Vorlage direkt verwenden
- 24. Atmosphären-API verwenden oder Grizzly direkt verwenden?
- 25. THREEjs - Schriftart in Schriftart konvertieren.json
- 26. HTML Verwenden Sie ein SVG-Bild, das eine benutzerdefinierte Schriftart
- 27. Verwenden Sie zwei verschiedene Gewichte von Google Roboto Schriftart
- 28. So verwenden Sie direkt JAR-Datei aus Hauptresourcen Ordner Java
- 29. Verwenden Sie Scala typeclasses direkt ohne implizites Beweisobjekt
- 30. Ändern Schriftart Schriftart Text
@SamSol: CS.NET gibt es nicht. Wo hast du jemals davon gehört? Die Sprache ist nur "C#". –