Мне нужно добавить набор шрифтов к PrivateFontCollection
. По какой-то причине эту задачу следует выполнить с помощью функции AddMemoryFont
.
var fontCollectionFromMemory = new PrivateFontCollection();
var fontCollectionFromFile = new PrivateFontCollection();
foreach (var file in Directory.GetFiles(@"C:\Windows\Fonts", "*.ttf"))
{
using (var stream = File.OpenRead(file))
{
var fontData = new byte[stream.Length];
stream.Read(fontData, 0, fontData.Length);
var fontDataPtr = Marshal.AllocCoTaskMem(fontData.Length);
try
{
Marshal.Copy(fontData, 0, fontDataPtr, fontData.Length);
fontCollectionFromMemory.AddMemoryFont(fontDataPtr, fontData.Length);
Thread.Sleep(100);
}
finally
{
Marshal.FreeCoTaskMem(fontDataPtr);
}
}
// fontCollectionFromFile.AddFontFile(file);
}
Console.WriteLine($"PrivateFontCollection's size(filled via AddMemoryFont): {fontCollectionFromMemory.Families.Length}");
Console.WriteLine($"PrivateFontCollection's size(filled via AddFontFile): {fontCollectionFromFile.Families.Length}");
После выполнения кода выше я получаю следующий вывод:
PrivateFontCollection's size(filled via AddMemoryFont): 34
PrivateFontCollection's size(filled via AddFontFile): 0
Этот результат очень запутанный. ..
Если я раскомментирую следующую строку:
fontCollectionFromFile.AddFontFile(file);
, тогда получу:
PrivateFontCollection's size(filled via AddMemoryFont): 166
PrivateFontCollection's size(filled via AddFontFile): 198
Этот результат также сбивает с толку.
Как эти результаты можно объяснить? Как правильно использовать PrivateFontCollection.AddMemoryFont
?
Среда: