Как получить путь к файлу шрифта в C #? - PullRequest
0 голосов
/ 07 октября 2018

Мне нужно присвоить строковой переменной путь к шрифту, выбранному с помощью FontDialog.

Как я могу выполнить эту задачу?

string fontTextPath = fontDialog.Font // and then?

Или есть другие методы?

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Вы уверены, что ffmpeg нужен путь шрифта, а не его имя?В большинстве случаев компоненты и библиотеки используют имя шрифта или его объекта и работают с ним.

, если компоненту требуется имя шрифта или объект шрифта, это так просто, как что-то вроде:

DrawText('Sample Text, fontDialog1.Font);

, но если вам действительно нужно получить путь к выбранному шрифту в FontDialog:

private List<string> GetFilesForFont(string fontName)
{
    var fontNameToFiles = new Dictionary<string, List<string>>();

    foreach (var fontFile in Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.Fonts)))
    {
        var fc = new PrivateFontCollection();

        if (File.Exists(fontFile))
            fc.AddFontFile(fontFile);

        if ((!fc.Families.Any()))
            continue;

        var name = fc.Families[0].Name;

        // If you care about bold, italic, etc, you can filter here.
        if (! fontNameToFiles.TryGetValue(name, out var files))
        {
            files = new List<string>();
            fontNameToFiles[name] = files;
        }

        files.Add(fontFile);
    }

    if (!fontNameToFiles.TryGetValue(fontName, out var result))
        return null;

    return result;
}

и использовать его следующим образом:

    if (fontDialog1.ShowDialog() == DialogResult.OK)
    {
        string fontName = fontDialog1.Font.Name;
        var fontFiles = GetFilesForFont(fontName);
    }
0 голосов
/ 07 октября 2018

Предполагается, что вы используете OpenFileDialog, потому что ваш предоставленный код использует объект с именем fontDialog ...

using (OpenFileDialog fontDialog = new OpenFileDialog())
{
    DialogResult result = fontDialog.ShowDialog();
    if (result == DialogResult.OK)
    {
        string file = fontDialog.FileName;
    }
}
...