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

Использование `TBitmap32.Assign()` в Delphi: сохранение прозрачности изображений с Graphics32

Delphi , Графика и Игры , Компоненты и Графика

Статья будет посвящена использованию функции Assign для объекта TBitmap32, который является частью библиотеки Graphics32, и рассмотрит проблему сохранения прозрачности изображений при работе с этой функцией в среде разработки Delphi. Напишем статью на русском языке, ориентированную на специалистов, работающих с Object Pascal (Delphi), и приведем примеры кода для лучшего понимания проблемы.

Использование TBitmap32.Assign() в Delphi: сохранение прозрачности изображений с Graphics32

В процессе разработки приложений на Delphi, особенно при работе с графическими элементами, важно понимать особенности использования различных типов битмап-объектов. В данной статье мы рассмотрим проблему, связанную с сохранением прозрачности изображений при использовании объекта TBitmap32 из библиотеки Graphics32.

Проблема

Разработчики часто сталкиваются с ситуацией, когда после присвоения изображения объекту TBitmap32, используя метод Assign, прозрачность исходного изображения теряется. Это может быть вызвано особенностями реализации метода Assign в библиотеке Graphics32 или неправильным использованием данной функции.

Пример кода

procedure TForm1.Button8Click(Sender: TObject);
var
  bmp32: TBitmap32;
  bmp: TBitmap;
  wic: TWICImage;
begin
  bmp32 := TBitmap32.Create(TMemoryBackend);
  bmp := TBitmap.Create;
  wic := TWICImage.Create;
  try
    wic.LoadFromFile('overlay.png'); // прозрачное изображение
    bmp32.Assign(wic);              // присваивание изображения объекту TBitmap32
    bmp32.SaveToFile('BMP32.bmp');  // сохраненное изображение не прозрачно
    img1.Bitmap.Assign(bmp32);
    bmp.Assign(wic);                // присваивание того же изображения объекту TBitmap
    bmp.SaveToFile('BMP.bmp');      // сохраненное изображение прозрачное
    img2.Bitmap.Assign(bmp);
  finally
    wic.Free;
    bmp32.Free;
    bmp.Free;
  end;
end;

Как видно из примера, при использовании TBitmap прозрачность сохраняется, в то время как с TBitmap32 - теряется.

Возможные причины проблемы

  • Ошибка в библиотеке Graphics32 (используется последняя версия с GitHub)
  • Ошибка в классе TWICImage
  • Ошибка в компиляторе Delphi 10.2.3
  • Неправильное использование методов и свойств объектов

Подтвержденное решение

Разработчику удалось найти решение проблемы, добавив несколько строк к модулю Graphics32. Внутри процедуры AssignFromGraphic класса TCustomBitmap32 были внесены изменения:

procedure AssignFromGraphic(TargetBitmap: TCustomBitmap32; SrcGraphic: TGraphic);
begin
  // ... существующий код ...
  //--- начало исправления
  else if (SrcGraphic is TWICImage) and (TWICImage(SrcGraphic).ImageFormat = wifPng) then
    AssignFromGraphicPlain(TargetBitmap, SrcGraphic, $00FFFFFF, False);
  //--- конец исправления
  // ... существующий код ...
end;

Также были изменены параметры процедуры AssignFromGraphicPlain, что позволило сохранить прозрачность исходного PNG-изображения.

Альтернативный ответ и дополнительные соображения

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

Заключение

В данной статье мы рассмотрели проблему потери прозрачности изображений при использовании TBitmap32.Assign(), а также предложили решение, основанное на изменении исходного кода библиотеки Graphics32. Разработчикам, работающим с графикой в Delphi, важно быть осведомленными о подобных нюансах и уметь их решать для обеспечения корректной работы приложений.

Статья предназначена для специалистов, знакомых с Object Pascal и библиотеками Graphics32, и может служить полезным руководством при работе с битмап-изображениями в Delphi.

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

Анализ кода в программной среде Delphi для обеспечения сохранения прозрачности изображений после использования функции `Assign` объекта класса `TBitmap32` из библиотеки Graphics32.


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

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




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


:: Главная :: Компоненты и Графика ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 02:23:41/0.0033988952636719/0