В предоставленном коде Delphi есть процедура DrawTransparentBmp, которая рисует прозрачный битовую картинку на канвасе в указанной позиции (x, y). Прозрачность битовой картинки достигается созданием временных битовых картинок и использованием функций BitBlt с различными операциями (SRCCOPY, SRCAND, SRCINVERT).
Следующий разбор того, что каждый часть кода делает:
Создает четыре временные объекта TBitmap: bmpAND, bmpINVAND, bmpXOR и bmpTarget.
Устанавливает bmpAND созданием инвертированной копии оригинальной битовой картинки (Bmp) с всеми пикселями, установленными в цвет прозрачности (clTransparent). Это будет использовано для маскирования.
Создает bmpINVAND как побитовая операция NOT на bmpAND, эффективно инвертируя ее снова. Это будет использовано для операции XOR.
Создает bmpXOR копированием оригинальной битовой картинки, а затем выполняет операцию AND с инвертированной маской (bmpINVAND). Это дает нам пиксели, которые только в оригинальной битовой картинке и не в области прозрачности.
Создает bmpTarget как копию оригинальной битовой картинки, но с областью прозрачности, установленной в ноль (поскольку она уже была учтена).
Выполняет операцию SRCAND на bmpTarget с bmpAND, эффективно маскируя любые пиксели, которые прозрачны.
Выполняет операцию SRCINVERT на bmpTarget с bmpXOR, эффективно добавляя обратно пиксели, которые только в оригинальной битовой картинке и не в области прозрачности.
Наконец, рисует bmpTarget на канвасе в позиции (x, y) с помощью SRCCOPY, что будет рисовать прозрачную битову картинку.
Код итерирует по каждому пикселю в битовой картинке, проверяет, является ли он не прозрачным, и если да, то рисует его на канвасе в указанной позиции. Этот подход более простой, но менее эффективен, чем оригинальный код.
В статье описывается процедура DrawTransparentBmp для рисования изображения с прозрачностью на canvas в Delphi, которая использует несколько битовлайтов и создает временные bitmap для достижения необходимого результата.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.