PrivateFontCollection не удалось добавить шрифт памяти в. Net Core - PullRequest
0 голосов
/ 17 февраля 2020

Мне нужно добавить набор шрифтов к 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?

Среда:

  • Windows 10 Home

  • . Net Core 2.2.106

  • System.Drawing.Common 4.7.0

...