Вариант использования: я использую WPF для динамического наложения текста на изображения в веб-контексте.
Решение:
Я использую DrawingContext
из DrawingVisual
(обернутый в оператор using
) для рисования исходного растрового изображения и наложения текста.
Проблема: после нескольких тысяч запросов метод [DrawingVisual].RenderOpen()
начинает отказываться от выполнения и выдает следующее исключение:
The system cannot find the file specified System.ComponentModel.Win32Exception UInt16 RegisterClassEx(WNDCLASSEX_D) at MS.Win32.UnsafeNativeMethods.RegisterClassEx(WNDCLASSEX_D wc_d)
at MS.Win32.HwndWrapper..ctor(Int32 classStyle, Int32 style, Int32 exStyle, Int32 x, Int32 y, Int32 width, Int32 height, String name, IntPtr parent, HwndWrapperHook[] hooks)
at System.Windows.Media.MediaContextNotificationWindow..ctor(MediaContext ownerMediaContext)
at System.Windows.Media.MediaContext..ctor(Dispatcher dispatcher)
at System.Windows.Media.MediaContext.From(Dispatcher dispatcher)
at System.Windows.Media.Visual.VerifyAPIReadWrite()
at System.Windows.Media.DrawingVisual.RenderOpen()
at ...
Временное исправление. Единственное исправление для этого - перезапуск пула приложений IIS на сервере, который устраняет проблему в течение нескольких часов.
Вопрос: Кто-нибудь задумывался над причиной этой проблемы (утечки, многопоточность, неуправляемый код и т. Д.)? Есть ли другой способ получить текст на изображении, избегая визуального отображения? Возможно, запись геометрии в растровое изображение и непосредственное наложение растрового изображения?