gpt4 book ai didi

c# - System.Drawing.FontFamily->IsStyleAvailable 始终返回 true

转载 作者:行者123 更新时间:2023-12-04 02:33:50 27 4
gpt4 key购买 nike

我正在使用 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 文件夹,您可以看到支持的样式。例如:Agency FB支持Bold;常规,但当我以这种方式查询时,我得到了下划线、删除线和斜体以及粗体和常规的样式。

有没有更好的方法来解决这个问题?

最佳答案

Windows 中的字体引擎知道如何从无样式的基本字体合成一种样式。在纸上做起来并不是特别困难,只是使词干变粗以变粗,倾斜它们以变斜体,画一条线以形成下划线或删除线。它不像优秀设计师创建的专用轮廓那么漂亮,但它确实可以完成工作。所以当你问“你能做到吗?”然后你会得到一个响亮的“肯定的事情!”

由于您明确添加了 TTF 文件,因此您已经知道无需合成即可直接支持哪些样式,无需询问。无论如何,通过 pinvoke 和/或挖掘 TTF 表也许可以找到答案,但它会很丑陋,而且 .NET 肯定不直接支持。据我所知,没有任何 winapi 函数可以直接告诉您。

关于c# - System.Drawing.FontFamily->IsStyleAvailable 始终返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21144997/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com