@sDevilGT

C# Как загрузить шрифт из облака?

День добрый.

Нужна реализация загрузки шрифта из облака.

Нашел такое решение:

public static FontFamily LoadFontFamily(byte[] buffer, out PrivateFontCollection fontCollection)
        {
            var handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
            try
            {
                var ptr = Marshal.UnsafeAddrOfPinnedArrayElement(buffer, 0);
                fontCollection = new PrivateFontCollection();
                fontCollection.AddMemoryFont(ptr, buffer.Length);
                return fontCollection.Families[0];
            }
            finally
            {
                handle.Free();
            }
        }


Далее вытаскиваю массив байтов шрифта из облака и используя этот метод получаю шрифт:

PrivateFontCollection fonts;
FontFamily family = LoadFontFamily(fontAsByteArray, out fonts);
font = new Font(family, fontProperties.Size, fontProperties.Style, GraphicsUnit.Pixel);


после этого использую в Graphics.DrawString:
graphics.DrawString(drawTextSettings.Text, font, brush, layoutRectangle, format);


Проблема заключается в том, что после второй отрисовке (вызова метода graphics.DrawString), а может и после пятой отрисовке начнёт постоянно падать метод graphics.DrawString с ошибкой generic error occurred in gdi+. Шрифты бывают разные и загружаются каждый раз перед очередной отрисовке,
Если Font загружаю обычно с локальной папки, то ошибка не возникает.

Кто-нибудь встречался с такой необходимостью? Буду рад помощи :)
  • Вопрос задан
  • 251 просмотр
Пригласить эксперта
Ответы на вопрос 1
Neuroware
@Neuroware
Программист в свободное от работы время
скорее всего гдето в gdi утечка неуправляемой памяти, проверяйте чтобы все после отработки кода было почищено. Можно попробовать вызывать чаще GC.Collect() может немного помочь, но вцелом нужно искать где ресурсы плохо чистятся
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы