Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Улучшение производительности отрисовки текста с использованием `ExtTextOutW` на высоком разрешении в Windows Creators Edition

Delphi , Синтаксис , Справочник по API-функциям

Объяснение задачи:

Вопрос пользователя связан с существенным падением производительности при использовании функции ExtTextOutW для отрисовки текста на битмапе высокого разрешения после обновления Windows 10 до версии Creators Edition. Пользователь заметил, что время выполнения функции увеличилось примерно в 50 раз, и предполагает, что это может быть связано с размерами шрифта или битмапа.

Статья:

Введение

С обновлением Windows 10 до версии Creators Edition пользователи столкнулись с проблемой снижения производительности при работе с текстовыми операциями в высоком разрешении. Функция ExtTextOutW, которая используется для отрисовки текста на битмапах, стала выполняться значительно медленнее. В данной статье мы рассмотрим причины возникновения этой проблемы и предложим возможные пути её решения.

Проблема

Пользователи, использующие приложения, написанные на Delphi, для отображения текста на битмапах высокого разрешения, столкнулись с существенным падением производительности после обновления Windows 10 до версии Creators Edition. Пример кода, использующего ExtTextOutW для отрисовки текста с эффектом тени, показывает, что операция, ранее выполнявшаяся менее чем за 1 мс, теперь занимает около 9.5 мс.

Диагностика

Исходя из отладочных логов, проблема может быть связана с размерами шрифта или битмапа. Также было замечено, что отключение клиппинга имеет лишь незначительное влияние на производительность. Созданный инструмент для профилирования проблемы подтвердил, что время отрисовки зависит от размера шрифта.

Решение

Ключевым моментом в решении проблемы является изменение качества шрифта с CLEARTYPE на ANTIALIASED. В современных версиях Delphi это можно сделать, установив свойство Font.Quality в значение fqAntiAliased. В более старых версиях Delphi потребуется изменить значение lfQuality в структуре TLogFont на ANTIALIASED_QUALITY, а затем создать новый шрифт с помощью CreateFontIndirect.

Пример кода

procedure RenderText(oBitmap : TBitmap; X,Y : Integer; cRect : TRect; S : WideString; testFunction : Integer; TxtEffect : Integer; EffectColor : TColor; Clipping : Boolean);
begin
  oBitmap.Canvas.Font.Quality := fqAntiAliased;
  // ... остальной код ...
end;

или

var
  lf: TLogFont;
begin
  if GetObject(oBitmap.Canvas.Font.Handle, SizeOf(TLogFont), @lf) = SizeOf(TLogFont) then
  begin
    lf.lfQuality := ANTIALIASED_QUALITY;
    oBitmap.Canvas.Font.Handle := CreateFontIndirect(lf);
  end;
end;

Заключение

Изменение качества шрифта на ANTIALIASED позволяет восстановить производительность отрисовки текста, аналогичную таковой до обновления Creators Edition. Это решение требует внимательного тестирования, так как проблема может проявляться и в более ранних версиях Windows, но с более высоким порогом срабатывания.

Примечание

Добавьте минимальный рабочий пример (MCVE), чтобы сообщество могло воспроизвести и проверить предложенное решение.


Эта статья представляет собой пересказ и анализ проблемы, а также предоставляет подтвержденное решение, основанное на данных из контекста вопроса. Приведенные примеры кода на Object Pascal (Delphi) предназначены для демонстрации предлагаемого решения.

Создано по материалам из источника по ссылке.

Вопрос пользователя касается увеличения времени выполнения функции `ExtTextOutW` для отрисовки текста на битмапах высокого разрешения после обновления Windows 10 до версии Creators Edition, что может быть связано с размерами шрифта или битмапа.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Справочник по API-функциям ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-13 19:12:46/0.0054199695587158/1