[英]How to obtain a font file path in c#?
我必须将通过FontDialog选择的字体的路径分配给字符串变量。
如何完成这项任务?
string fontTextPath = fontDialog.Font // and then?
还是有其他方法?
您确定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);
}
假设您使用的是OpenFileDialog,因为您提供的代码使用的是名为fontDialog的对象...
using (OpenFileDialog fontDialog = new OpenFileDialog())
{
DialogResult result = fontDialog.ShowDialog();
if (result == DialogResult.OK)
{
string file = fontDialog.FileName;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.