2013-02-22 69 views
0

我正在寻找一种方法去寻找使用.NET框架给定字体的通用名称(Sans-Serif,Serif,Monospace,Cursive,Fantasy)。我的偏好语言是C#,但我已经写了近15年的源代码,所以如果你可以给我一个现代语言的例子,我可以去翻译它,我自己。如何在.NET框架中找到字体的通用名称?

[编辑 - 澄清]

我需要一种方法来确定哪些通用字体家族(无衬线,衬线,等宽,草书,或幻想......甚至可能象征)的任何给定的System.Drawing.Font对象所属。

举个例子,如果我创建一个从下面的代码行的字体:

System.Drawing.Font font = new System.Drawing.Font("Serif", 12f, System.Drawing.GraphicsUnit.Point); 

产生的字体可能会是12点“宋体”字体。但我不想要“时代”,“新罗马”,甚至“新罗马时报”,我需要知道它在“Serif”系列中。

+0

你说的是一个'Font'对象?或一个字体文件? – Aren 2013-02-22 01:50:41

+0

http://stackoverflow.com/questions/2497755/font-family-name-from-font-file – 2013-02-22 01:51:11

+0

@Aren我开始用'Font'对象。 – 2013-02-22 02:33:57

回答

1

这是一个印刷字体分类不直接可从Windows API的功能。一个可能的后门是GetFontData(),它允许你直接访问字体的TrueType表格。很多信息,我不知道这种确切的信息可用。你可以在表格的the specification中看看自己。

+0

感谢您的链接。你是对的:有很多有趣的,可能有用的信息。不幸的是,我无法找到链接到通用姓氏的表格中的任何内容。除非我得到更好的答案,否则我将其标记为答案,因为已经向我指出这样的结论,即没有保证。再次感谢汉斯。 – 2013-02-22 15:45:49

0

长的路要走大约为字体找到通用的外观名称。

假设你有一个Font对象,就可以得到字体家族名是这样的:

Font font; 
string familyName = font.FontFamily.Name; 

为了回应你的编辑和通信ent:据我所知,没有关于字体类型的信息存储在一个字体中。例如,我可以设计字体并将其分类为幻想,而将字体分类为无​​衬线字体。因为对于每个类所包含的内容没有明确的定义,所以它不是字体的属性。

有一个全系统的默认等宽,无衬线和serif字体(通过FontFamily),但不会告诉你任何字体是否有衬线。使用font.Style,您可以了解字体是否为草书,带下划线等。通过this answer,您可以了解字体是否等宽。

+0

多方便!我不确定我是如何忽略这一点的。谢谢。 – 2013-02-22 02:14:57

+0

好的,这并不完全符合我的要求。当我使用加载形式'字体F =新字体( “MonoSans ”12.0f,GraphicsUnit.Point);''然后检查f.FontFamily.Name',我得到“ dejavu的三世”。我期望看到的是“Sans-Serif”(或其他一些变体)。 – 2013-02-22 02:22:03

+0

@JasonSatterfield这是奇怪的,当我想你的代码,我得到了'没有微软Serif' – AbZy 2013-02-22 02:33:13

1

您可以linq

Here微软的font你寻找新的清单去。

实施例:

  • 无衬线衬线 = Microsoft Sans Serif
  • SUV = Batang


var font = FontFamily.Families 
        .Where(c => c.Name == "Microsoft Sans Serif") 
        .FirstOrDefault(); 

UPDATE:

下面有你要找的泛型是

http://msdn.microsoft.com/en-us/library/system.drawing.fontfamily.aspx

var font = FontFamily.GenericMonospace; 
+0

这不是我要找的。我没有记住“TheFontYouLookingFor”。我有一个任意的'System.Drawing.Font'对象,我需要确定它来自哪个家族。我需要的是让“无衬线”,“衬线”,“运载人”,“行草”或“幻想”(甚至可能是“符号”)中的一个。 – 2013-02-22 02:33:35

+0

哦..我的意思的单词“TheFontYouLookingFor”是实际__font name__':)' – spajce 2013-02-22 02:34:58

+0

我意识到这一点。但我试图从现有的字体中获取通用名称。 – 2013-02-22 02:41:20