C# 系统图.字体系列->;IsStyleAvailable始终返回true
我使用PrivateFontCollection通过AddMemoryFont加载字体。我检索FontFamily,然后使用IsStyleAvailable查询它,以确定字体支持的样式。然而,由于字体众多,对IsStyleAvailable的每次调用都返回trueC# 系统图.字体系列->;IsStyleAvailable始终返回true,c#,fonts,C#,Fonts,我使用PrivateFontCollection通过AddMemoryFont加载字体。我检索FontFamily,然后使用IsStyleAvailable查询它,以确定字体支持的样式。然而,由于字体众多,对IsStyleAvailable的每次调用都返回true PrivateFontCollection pfc = new PrivateFontCollection(); var fontBuffer = Marshal.AllocCoTaskMem(dta.Length); Marshal
PrivateFontCollection pfc = new PrivateFontCollection();
var fontBuffer = Marshal.AllocCoTaskMem(dta.Length);
Marshal.Copy(dta, 0, fontBuffer, dta.Length);
pfc.AddMemoryFont(fontBuffer, dta.Length);
System.Drawing.FontFamily fam = pfc.Families[0];
if (fam.IsStyleAvailable(d.FontStyle.Bold)) //do something
有人知道如何从FontFamily获取实际的样式信息吗?如果查看C:\Windows\Fonts文件夹,可以看到支持的样式。例如:代理FB支持粗体;常规,但当我以这种方式查询它时,我会得到下划线、删除线和斜体以及粗体和常规的样式
有更好的方法吗?Windows中的字体引擎知道如何从未设置样式的基本字体合成样式。在纸上做这件事并不特别困难,只要把茎粗一点,变粗一点,倾斜一点,变斜体,画一条线,画下划线或者划掉。它并不像一个好的设计师所创造的那些专门的轮廓那么漂亮,但它确实完成了任务。所以当你问“你能做到吗?”你会得到一个响亮的“肯定的事!”
由于您显式地添加了TTF文件,因此您已经知道在不进行合成的情况下直接支持哪些样式,并且不需要询问。通过pinvoke和/或通过TTF表挖掘可能会发现问题,但这会很难看,而且肯定不会得到.NET的直接支持。据我所知,没有winapi函数可以直接告诉您。什么是d.FontStyle.Bold?您使用的是windows 8吗?使用的是d=System.Drawing;