Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 系统图.字体系列->;IsStyleAvailable始终返回true_C#_Fonts - Fatal编程技术网

C# 系统图.字体系列->;IsStyleAvailable始终返回true

C# 系统图.字体系列->;IsStyleAvailable始终返回true,c#,fonts,C#,Fonts,我使用PrivateFontCollection通过AddMemoryFont加载字体。我检索FontFamily,然后使用IsStyleAvailable查询它,以确定字体支持的样式。然而,由于字体众多,对IsStyleAvailable的每次调用都返回true PrivateFontCollection pfc = new PrivateFontCollection(); var fontBuffer = Marshal.AllocCoTaskMem(dta.Length); Marshal

我使用PrivateFontCollection通过AddMemoryFont加载字体。我检索FontFamily,然后使用IsStyleAvailable查询它,以确定字体支持的样式。然而,由于字体众多,对IsStyleAvailable的每次调用都返回true

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;