(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
Другие вопросы по тегам