我已将MemoryStream加载到PrivateFontCollection中,并打印Font-Family计数。
我已经执行了这个过程10次,我希望每次迭代都有相同的输出。我想要两次迭代的正确输出,但有时第一次迭代也会出错。我无法得到一致的输出。
提供一种使用PrivateFontCollection获得一致输出的解决方案。
注意:Fonts文件夹包含5种不同的字体。
private static void Work()
{
string fontPath = @"D:\fonts";
PrivateFontCollection fontCollection = null;
for (int i = 1; i < 11; i++)
{
var fileList = Directory.GetFiles(fontPath, "*.ttf", SearchOption.TopDirectoryOnly);
fontCollection = SafeLoadFontFamily(fileList);
Console.WriteLine(i+" Iteration and families count:"+fontCollection.Families.Length);
fontCollection.Dispose();
}
Console.ReadKey();
}
private static PrivateFontCollection SafeLoadFontFamily(IEnumerable<string> fontList)
{
if (fontList == null) return null;
var fontCollection = new PrivateFontCollection();
foreach (string fontFile in fontList)
{
if (!File.Exists(fontFile)) continue;
byte[] fontBytes = File.ReadAllBytes(fontFile);
var fontData = Marshal.AllocCoTaskMem(fontBytes.Length);
Marshal.Copy(fontBytes, 0, fontData, fontBytes.Length);
fontCollection.AddMemoryFont(fontData, fontBytes.Length);
}
return fontCollection;
}
10次操作的期望输出:
1 次迭代和家族计数:5
2 次迭代和家族计数:5
3 次迭代和家族计数:5
4 次迭代和家族计数:5
5 次迭代和家族计数:5
6 次迭代和家族计数:5
7 次迭代和家族计数:5
8 次迭代和家族计数:5
9 次迭代和家族计数:5
10 次迭代和家族计数:5
实际输出:[不一致的输出]
1 次迭代和家族计数:5
2 次迭代和家族计数:5
3 次迭代和家族计数:5
4 次迭代和家族计数:5
5 次迭代和家族计数:4
6 次迭代和家族计数:3
7 次迭代和家族计数:3
8 次迭代和家族计数:4
9 次迭代和家族计数:4
10 次迭代和家族计数:4
byte[] fontBytes = [MemoryStream].ToArray()
和byte[] fontBytes = File.ReadAllBytes(fontFile);
没有任何区别。因此,如果您不指定MemoryStream或任何其他结构/类/对象包含什么(如已经询问的那样),提到MemoryStream对问题没有任何帮助。 - Jimibyte[]
或MemoryStream
没有问题。我有5个不同的byte[]
,并使用AddMemoryFont
方法将它们添加到PrivateFontCollection
中。整个过程重复了5次。对于第一次迭代,我有privateFontCollection.Families.count
为5,而第3或第4次迭代其字体系列计数不同,我无法获得可靠的字体系列计数。 - MadhanSafeLoadFontFamily
方法使用它(不要更改任何内容)。每次调用该方法,您将始终以相同的顺序获得相同的字体系列名称。在此处不要调用Marshal.FreeCoTaskMem()
(如上所述),也不要为每个字体处理PrivateFontCollection。调用SafeLoadFontFamily()
,将其打印到控制台中,然后将其处理并再次调用SafeLoadFontFamily()
以重新填充集合。我已将此过程添加到新编辑中。您还可以使用UnsafeLoadFontFamily
而无需进行编组。 - Jimiunsafe
方法。您需要在“项目->属性->生成”面板中启用不安全代码。 - Jimi