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

Переход с GDI и UniScribe на Direct2D и DirectWrite: оптимизация рисования символов в Delphi <|eot_id|>

Delphi , Компоненты и Классы , TImage и TImageList

Переход с GDI и UniScribe на Direct2D и DirectWrite: оптимизация рисования символов в Delphi

В статье рассматривается процесс перехода от использования старых технологий рисования, таких как GDI и UniScribe, к новым – Direct2D и DirectWrite. Особое внимание уделяется оптимизации рисования символов в среде разработки Delphi, которая использует язык Object Pascal.

Описание проблемы

При переходе с GDI и UniScribe на Direct2D и DirectWrite возникает необходимость адаптации кода для работы с новыми возможностями. Одной из проблем является рисование символов из объекта TImageList на TDirect2DCanvas, который является пользовательским классом, наследующим TCustomCanvas. Метод Draw в TImageList предназначен для работы с TCanvas, а не с более общим TCustomCanvas, что вызывает трудности при попытке напрямую использовать его с TDirect2DCanvas.

Подход к решению

Один из возможных вариантов решения – это рисование символа из TImageList в временный битмап, который затем можно будет нарисовать на TDirect2DCanvas. Однако такой подход может существенно замедлить процесс рисования, так как потребует дополнительных операций копирования битов.

Подтвержденный ответ

В коде TDirect2DCanvas уже реализована функция StretchDraw, которая выполняет необходимые действия для рисования графического объекта на TDirect2DCanvas. Эта функция создает временный битмап, копирует в него графику, создает ID2D1Bitmap и копирует в него временный битмап, после чего рисует ID2D1Bitmap на целевом объекте RenderTarget.

procedure TDirect2DCanvas.StretchDraw(const Rect: TRect; Graphic: TGraphic;
  Opacity: Byte);
var
  D2DBitmap:  ID2D1Bitmap;
  D2DRect: TD2DRectF;
  Bitmap: TBitmap;
begin
  Bitmap := TBitmap.Create;
  try
    Bitmap.Assign(Graphic);

    D2DBitmap := CreateBitmap(Bitmap);

    D2DRect.Left   := Rect.Left;
    D2DRect.Right  := Rect.Right;
    D2DRect.Top    := Rect.Top;
    D2DRect.Bottom := Rect.Bottom;
    RenderTarget.DrawBitmap(D2DBitmap, @D2DRect, Opacity/255);
  finally
    Bitmap.Free;
  end;
end;

Альтернативный ответ и оптимизация

Если важна производительность, следует избегать использования TImageList. Вместо этого рекомендуется извлекать изображения напрямую и создавать для каждого из них ID2D1Bitmap с помощью TDirect2DCanvas.CreateBitmap, после чего хранить эти объекты. При необходимости рисования достаточно будет вызвать DrawBitmap на RenderTarget, передав ему ID2D1Bitmap.

Заключение

Переход на Direct2D и DirectWrite требует внимательного планирования и оптимизации, особенно в части рисования символов. Использование временных битмапов может быть необходимым, но для достижения оптимальной производительности следует избегать работы с TImageList и напрямую создавать ID2D1Bitmap для каждого изображения.


Приведенный пример кода демонстрирует, как можно рисовать графические объекты на TDirect2DCanvas, используя временный битмап для преобразования. Однако, для оптимизации производительности, рекомендуется использовать альтернативный подход, описанный в разделе "Альтернативный ответ и оптимизация".

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

Статья рассматривает оптимизацию рисования символов при переходе от использования GDI и UniScribe к новым технологиям Direct2D и DirectWrite в среде разработки Delphi, с упором на работу с объектом TImageList на TDirect2DCanvas.


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

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




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


:: Главная :: TImage и TImageList ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-03-14 08:53:25/0.0033438205718994/0