(VB.net) Как использовать файл.ttf (шрифт) для личной коллекции шрифтов
Итак, я пытаюсь использовать коллекцию privatefont для своей программы, чтобы добавить немного уникальности. Шрифт, который я использую, по умолчанию не установлен на компьютерах. Название шрифта - youmurdererbb_reg. У меня есть файл шрифта в папке ресурсов, и файл в формате.ttf. Вот что у меня есть:
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Drawing.Text
Imports System.Text
Dim pc As New PrivateFontCollection
Private Sub Main_Menu_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Try
pc.AddFontFile(YouMurderer)
Catch ex As Exception
Trace.WriteLine(ex.ToString)
End Try
End Sub
Private Sub Main_Menu_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim Fnt As Font = New Font(pc.Families(0), 80, FontStyle.Regular)
e.Graphics.DrawString("This is the text that is being drawn", Fnt, Brushes.Black, 10, 10)
End Sub
Теперь, когда я объявил коллекцию частных шрифтов, я попробовал эти разные вещи, чтобы заставить ее работать:
Dim YouMurderer As String = Encoding.ASCII.GetString(My.Resources.youmurdererbb_reg)
Dim YouMurderer As String = Convert.ToString(My.Resources.youmurdererbb_reg)
Dim YouMurderer As String = Convert.ToBase64String(My.Resources.youmurdererbb_reg)
Dim YouMurderer As String = Encoding.UTF8.GetString(My.Resources.youmurdererbb_reg)
Но какой бы я ни выбрал, он просто показывает всю форму с большой красной буквой "X" (как "ErrorImage" в картинках) (у меня есть изображение, заданное для фона форм в качестве дополнительной информации).
Другая проблема состоит в том, что если я не пытаюсь преобразовать это:
Dim YouMurderer As String = My.Resources.youmurdererbb_reg
Тогда возникает ошибка:
Value of type '1-dimensional array of Byte' cannot be converted to 'String'.
Мне нужна помощь с этим в.NET (Framework 4)! Вся программа написана на VB.net, а не на C#, C++ или JAVA.
1 ответ
Я создал библиотеку, которая делает это простым, называется BizArk. Вы можете установить его, используя NuGet, или, если вы просто хотите использовать источник в качестве ссылки, вы можете получить код здесь (Current/BizArkCore/Util/FontUtil.cs). Обратите внимание, что код написан на C#, но кода там не так много, поэтому, надеюсь, вы сможете выполнить его.
Если вы используете класс FontUtil как есть, вы можете использовать его для создания любого шрифта, даже встроенного в шрифты. Вот как это использовать...
Private Sub Main_Menu_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Try
FontUtil.RegisterFont(My.Resources.youmurdererbb_reg)
Catch ex As Exception
Trace.WriteLine(ex.ToString)
End Try
End Sub
Private Sub Main_Menu_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim Fnt As Font = FontUtil.Create("YouMurderer", 80, FontStyle.Regular)
e.Graphics.DrawString("This is the text that is being drawn", Fnt, Brushes.Black, 10, 10)
Fnt.Dispose()
End Sub